일련의 파일을 호환되는 폴더에 복사하는 루프를 만들려면 어떻게 해야 합니까?

일련의 파일을 호환되는 폴더에 복사하는 루프를 만들려면 어떻게 해야 합니까?

예를 들어, 숫자 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%%_*}합니다. 이 경우 first 이전의 모든 기호가 됩니다 _. 이름을 대체한 결과 1_2_3.nii는 입니다 cp 1_2_3.nii 1/.

이 솔루션은 필요한 폴더를 자동으로 생성하고 파일 접두사 범위를 지정할 필요가 없기 때문에 더 유연합니다.

관련 정보