Ich habe 291 nummerierte Dateien (beginnend bei 001 - Titel und endend bei 291 - Titel), die in separate Verzeichnisse verschoben werden müssen. (001 bis 021 bis Ordner 1, 022 bis 053 bis Ordner 2, sie müssen nicht jedes Mal die gleiche Anzahl von Dateien enthalten).
Ich dachte, ich könnte es so machen: ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh
Ich bin mir fast sicher, dass es einen besseren Weg gibt. Was wäre das?
EDIT: Das hätte also gut funktioniert, aber ich erinnerte mich ...
Ich bin nicht mit einem Terminal festgefahren, also habe ich einen Dateimanager zum Klicken und Ziehen verwendet. Die Frage bleibt jedoch bestehen.
ls -l | grep ^- | wc -l
ich die Anzahl der Zeilen ermitteln.Antworten:
Da Sie sagten, dass es nicht immer genau 21 Dateien sind, müssen Sie die Dateien manuell verschieben. Um dies effektiv zu tun, können Sie die Klammererweiterung verwenden :
quelle
file{001..21}name
, Sie müssen keinen Platzhalter verwenden. Wie auch immer, ich bin froh, dass es für dich funktioniert hat.Dadurch werden die Dateien wie beschrieben verschoben (außer dass der zweite Bereich für die zweiten 21 Dateien zwischen 022 und 042 liegt).
quelle
Was ich meine ist, viele Dateien zu verschieben (wie zehntausende oder eine Million), Shell wird sich über die Dateiliste zu lange beschweren, wenn Sie nur {1..20} verwenden, also
In zsh können Sie das integrierte mv laden:
Danach können Sie folgende Befehle verwenden:
oder wenn Sie einige Shell-Skripte schreiben, können Sie Folgendes tun:
Wenn Sie zsh nicht verwenden, können Sie auf /unix/128559/solving-mv-argument-list-too-long verweisen
quelle