一連のファイルを互換性のあるフォルダにコピーするループを作成するにはどうすればよいでしょうか

一連のファイルを互換性のあるフォルダにコピーするループを作成するにはどうすればよいでしょうか

たとえば、番号 1 で始まるファイルをフォルダー番号 1 などに配置するには、次のコマンドを使用してそれぞれに対して実行できます。

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

答え1

(1から100)のようなものですか?

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

答え2

ソース ディレクトリで次のスクリプトを実行します。

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

${name%%_*}、最も長く一致するサフィックス パターンを削除します。この場合、最初の の前のすべてのシンボルが削除されます_。name の置換の結果1_2_3.niiは になりますcp 1_2_3.nii 1/

このソリューションは、必要なフォルダーを自動的に作成し、ファイルの範囲のプレフィックスを指定する必要がないため、より柔軟です。

関連情報