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

0

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

find /home/ -name '1_*_*_*_*_*_*.nii' -exec cp '{}' /home/1 ';'
    
por Nour 04.11.2016 / 10:59

2 respostas

0

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

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

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

O ${name%%_*} remove o padrão de sufixo de correspondência mais longo. Neste caso, serão todos os símbolos antes do primeiro _ . O resultado da substituição do nome 1_2_3.nii será cp 1_2_3.nii 1/ .

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

    
por 04.11.2016 / 11:33

Tags