Linux Bash-Skript - Sortieren Sie aufeinanderfolgende Dateien in aufeinanderfolgende Ordner

Linux Bash-Skript - Sortieren Sie aufeinanderfolgende Dateien in aufeinanderfolgende Ordner

Ich habe eine Folge von Tausenden von Dateien mit den folgenden Namen:

file01-01-01, file01-01-02 etc.
file01-02-01, file01-02-02 etc.
file02-01-01, file02-02-02 etc.

Ich möchte die Dateien in Ordner mit den folgenden Namen sortieren:

dir01-01 (containing files01-01*)
dir01-02 (containing files01-01*)
dir02-01 (containing files02-01*)

Ich weiß, dass ich den Zeitaufwand hierfür mit einer Zeile wie der folgenden verkürzen kann:

mkdir dir01-01; for f in file01-01*; mv "$f" dir01-01; done

Aber das oben Genannte reduziert die Sortierzeit nur geringfügig. Wie kann ich den gesamten Sortiervorgang automatisieren?

Ich weiß, dass ich etwas mit let N++ machen muss, bin mir aber nicht sicher, wie ich es integrieren soll.

Antwort1

Das sollte funktionieren. Zuerst habe ich Testdateien wie diese erstellt:

touch file01-01-01 file01-01-02 file01-02-01 file01-02-02 file02-01-01 file02-02-02

Ich habe ihre Existenz durch Verwendung bestätigt ls -1und die Ausgabe sah folgendermaßen aus:

file01-01-01
file01-01-02
file01-02-01
file01-02-02
file02-01-01
file02-02-02

Dann habe ich dieses Bash-Skript im Verzeichnis ausgeführt, das diese Dateien enthält:

find . -type f |\
  while read FULL_FILE_PATH
  do
    FIRST_TWO_DIGITS=$(echo "${FULL_FILE_PATH}" | grep -Eo '[[:digit:]]{2}-[[:digit:]]{2}');
    if [ ! -z "$FIRST_TWO_DIGITS" -a "$FIRST_TWO_DIGITS" != " " ]; then
      DIR=dir"${FIRST_TWO_DIGITS}";
      mkdir -p "${DIR}";
      mv "${FULL_FILE_PATH}" "${DIR}";
    fi
  done

Nachdem das erledigt war, habe ich das Verzeichnis ls -1folgendermaßen geprüft und hier ist die zurückgegebene Ausgabe:

dir01-01
dir01-02
dir02-01
dir02-02

Die Verzeichnisse sind also da, aber um zu bestätigen, dass die Dateien kopiert wurden, habe ich den lsBefehl mit einem Befehl *wie diesem ausgeführt: ls -1 *. Und hier ist die Ausgabe:

dir01-01:
file01-01-01
file01-01-02

dir01-02:
file01-02-01
file01-02-02

dir02-01:
file02-01-01

dir02-02:
file02-02-02

verwandte Informationen