Wie kann ich eine Schleife erstellen, um eine Reihe von Dateien in ihre kompatiblen Ordner zu kopieren?

Wie kann ich eine Schleife erstellen, um eine Reihe von Dateien in ihre kompatiblen Ordner zu kopieren?

Beispielsweise von Dateien, die mit der Nummer 1 beginnen, bis zum Ordner mit der Nummer 1 und so weiter… kann ich das für jede einzelne Datei mit dem folgenden Befehl tun:

find /home/ -name '1_*_*_*_*_*_*.nii' -exec cp '{}' /home/1 ';'

Antwort1

Meinst du so etwas (1 bis 100)?

for i in {1..100}; do
  find /home/ -name "${i}_*_*_*_*_*_*.nii" -exec cp '{}' /home/${i} \;
done

Antwort2

Führen Sie dieses Skript im Quellverzeichnis aus:

for name in *.nii ; # find all files with a pattern and process its
do
  directory="${name%%_*}/"
  if [ ! -d "$directory" ]; then mkdir "$directory" ; fi # make directory if not exist
  cp "$name" "$directory" ; # copy file into the directory
done

Das ${name%%_*}entfernt das längste passende Suffixmuster. In diesem Fall sind es alle Symbole vor dem ersten _. Das Ergebnis der Ersetzung für Name 1_2_3.niiist cp 1_2_3.nii 1/.

Diese Lösung ist flexibler, da sie die erforderlichen Ordner automatisch erstellt und kein Präfix für den Dateibereich angegeben werden muss.

verwandte Informationen