Kopieren Sie sequentielle Dateien in sequentielle Verzeichnisse

-2

Ich muss mehrere aufeinanderfolgende Dateien in aufeinanderfolgende Verzeichnisse kopieren. Die Dateien haben das julianische Datum (Tag des Jahres) mit anderen Informationen im Dateinamen. Die Verzeichnisse sind nach julianischem Datum (Tag des Jahres) aufgelistet. Ich benötige jede Akte, um mit dem julianischen Datum übereinzustimmen.

Zu klären....

Ich habe 365 Dateien mit der Bezeichnung "test_001.txt" bis "test_365.txt" in "/ home / aaa". Jede Datei muss in ein eigenes Verzeichnis in "/ data" mit den Bezeichnungen "001" bis "365" verschoben werden.

Hoffe das klärt es auf. Vielen Dank!

gbh
quelle
Beispieldaten bitte
roaima
Befinden sich die Quelldateien und Verzeichnisse am selben Ort oder in verschiedenen Teilen des Dateisystems?
Roaima
Sie befinden sich in verschiedenen Teilen, jedoch auf demselben Server.
gbh
@gbh Bitte bearbeite dein Bestes und mache es mit einem klaren Beispiel klarer.
Kenorb

Antworten:

0

So etwas sollte funktionieren

for K in $(seq -w 1 365)
do
    mv *_${K}.* "/data/$K" 2>/dev/null
done
Roaima
quelle
Danke für die Hilfe! Aber das hat nur eine Datei verschoben, die mit 365 beschriftet ist. Ich muss alle Dateien verschieben. Danke noch einmal! Das ist ein toller Start!
Dienstag,
@gbh sorry, ich bin gerade auf einem Handy und habe den seqStartwert 1 verloren. Beitrag bearbeitet
roaima
Danke noch einmal! Aber leider hatte es das gleiche Ergebnis. Ich habe es mit Hilfe Ihres Codes herausgefunden. Es ist unten.
gbh
@gbh Vielleicht hat Ihre Version von seq nicht die -wOption, die sicherstellt, dass alle Ausgabesequenzen die gleiche Länge haben (dh drei Zeichen in diesem Szenario)? Abgesehen davon kann ich nicht verstehen, warum dies bei Ihnen nicht funktionieren sollte - es sei denn, Ihre Dateien stimmen nicht mit dem Glob *_NNN.*für numerische Werte von überein NNN. Ich nehme an, Sie könnten es verwenden, test_${K}.txtwenn Sie das Matching präzisieren möchten.
Roaima
-1

for K in $(seq -f "test_%200g" 365); do cp *_${K}.* "/data/$K" 2>/dev/null; done

Wie ich herausgefunden habe, scheint es, dass im "seq" -Befehl '% 2' eine ganze Zahl darstellt und jede '0' einen Ort darstellt, dh Einsen, Zehner. Das 'g' schließt den Ausdruck. Ich kann mich irren, aber es funktioniert! Danke für die Hilfe!

gbh
quelle