Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Begrenzte Anzahl von Dateien verschieben

Frage Entwicklung Batch & Shell

Mitglied: rallelin

rallelin (Level 1) - Jetzt verbinden

13.08.2010 um 17:15 Uhr, 4909 Aufrufe, 2 Kommentare

Moin moin werte Leser,
als Kaufmann, der sich eher selten in der Bash umtut, fehlt mir leider der Durchblick, das nachfolgende Problem in den Grifff zu bekommen.
Wenn jemand eine entsprechende Idee zur Lösung hat, würde ich mich über eine Rückmeldung sehr freuen und danke schon jetzt...

Szenario:
Es existiert ein Verzeichnis mit einer hohen, jedoch unbestimmten Anzahl von Dateien (alles xml), die blockweise (z.B. jeweils 5 Dateien)
in ein anderes Verzeichnis verschoben werden sollen, um dort von einem anderen Programm weiter verarbeitet werden zu können.
Cron-gesteuert wird dann nach der Weiterverarbeitung der nächste Block verschoben.

Das äussere Gerüst steht schon und ist ausgetestet - jetzt muss ich nur noch die 5 Dateien irgendwie verschoben bekommen.
Anfangs dachte ich, es könnte mit einer Schleife per "for i in ..." funktionieren. Allerdings hält die Variable dann jedoch *alle* Dateinamen.
Obwohl ich noch nie mit Arrays experimentiert habe, glaube ich, dass die Fragestellung hierüber erledigt werden könnte...
Mitglied: pieh-ejdsch
14.08.2010 um 01:12 Uhr
moin rallelin und Willkommen im Forum

wenn die Dateizahl ins unbekannte geht würde ich mit einer Liste Arbeiten.

diese Liste wird erstellt, wenn noch keine Vorhanden ist
die Anzahl kann ausgewählt werden
wenn die Liste Leer bzw nicht mehr da ist - wird automatisch eine neue angelegt

Vorteil: das Verzeichnis wird nicht jedesmal neu durchgeackert
Nachteil: wenn neue Dateien ins Verzeichnis kommen werden diese erst abgearbeitet wenn die Liste durch ist (kann natürlich auch ein Vorteil sein je nach dem)
01.
::----snipp----Dateien-Blockweise-verschieben 
02.
@echo Off 
03.
set Woher="D:\ein Verzeichnis" 
04.
set "Dorthin=D:\das andere Verzeichnis" 
05.
set "Dateityp=*.xml" 
06.
 
07.
pushD %Woher% 
08.
 
09.
del "%temp%\tmp" 2>nul 
10.
if exist "%temp%\tmp2" (move "%temp%\tmp2" "%temp%\tmp">nul ) else dir /b %Dateityp%>"%temp%\tmp" 
11.
 
12.
::Der Parameter enspricht den Maximalen BlockVerschub ( call :move 10 )entspricht Maximal 10 Dateien 
13.
call :move 5 
14.
popD 
15.
goto :eof 
16.
 
17.
 
18.
:move 
19.
set "Nr=1" 
20.
:: zum scharfmachen das @ECHO entfernen 
21.
for /f "usebackq delims=" %%i in ("%temp%\tmp") do (@ECHO move "%%i" "%Dorthin%\" 
22.
	setlocal enabledelayedexpansion 
23.
	if !Nr! == %1 endlocal & set "Nr=1"&more +%1 "%temp%\tmp">"%temp%\tmp2"&goto :eof 
24.
	endlocal & set /a Nr+=1 
25.
26.
::----snapp----Dateien-Blockweise-verschieben
Gruß Phil
Bitte warten ..
Mitglied: rallelin
14.08.2010 um 06:46 Uhr
Hallo Phil,

danke für Deine Mühe.
Sieht für mich aus, als wäre das ein Batch (call, goto usw.) - hilft mir in der Bash (#!/bin/bash) daher nur bedingt weiter.
Mal schauen, ob ich das irgendwie angepasst bekomme...

Nochmals danke,
Ralf

Nachtrag (16.08.2010): Problem wurde mit einem zweiten Script "umgangen";
das Shell-Script arbeitet wie bisher und übergibt an ein gesondertes Perl-Script,
welches über 'readdir' und 'rename' die noch ausstehende Aktion durchführt.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...