一連のファイルを互換性のあるフォルダにコピーするループを作成する方法

一連のファイルを互換性のあるフォルダにコピーするループを作成する方法

たとえば、ファイル番号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%%_*}最長一致サフィックスパターンを削除します。この場合、最初の前のすべての記号になります_。名前置換の結果1_2_3.niiはですcp 1_2_3.nii 1/

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

関連情報