Como posso criar um loop para copiar uma série de arquivos para suas pastas compatíveis?

Como posso criar um loop para copiar uma série de arquivos para suas pastas compatíveis?

Por exemplo, arquivos começando com o número 1 até a pasta número 1 e assim por diante…, posso fazer isso para cada um usando o seguinte comando:

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

Responder1

Você quer dizer algo assim (1 a 100)?

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

Responder2

No diretório de origem execute este script:

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

Remove o ${name%%_*}padrão de sufixo correspondente mais longo. Neste caso serão todos os símbolos antes de first _. O resultado da substituição do nome 1_2_3.niiserá cp 1_2_3.nii 1/.

Esta solução é mais flexível porque cria automaticamente as pastas necessárias e não há necessidade de fornecer o prefixo do intervalo de arquivos.

informação relacionada