Como encontrar certos arquivos e movê-los para um novo diretório no mesmo comando?

5

Então, eu estava olhando em volta e tudo que encontrei é como fazer isso somente se o diretório já estiver pronto, o que é isto:

find source -name '*.z' -exec cp {} destination \;

Mas como posso criar um novo diretório para onde quero enviar esses arquivos no mesmo comando? Isso é o que eu tentei, mas sem sucesso:

find source -name '*.z' -exec cp {} | mkdir newDirectory \;
    
por John 12.10.2013 / 17:48

2 respostas

8

Uma opção é usar o comando install em vez de cp . Tem uma opção para criar todos os diretórios principais.

find source -name '*.z' -exec install -D {} dest \;
    
por 12.10.2013 / 18:57
1

Você não pode enviar dados para mkdir dessa forma. Você poderia fazer algo assim:

find source -name '*.z' -exec sh -c 'mkdir -p newDirectory && cp "$@" newDirectory' _ {} +

ou (assumindo nomes de arquivos que não contenham novas linhas)

find source -name '*.z' | while IFS= read -r foo; do 
   mkdir -p newDirectory;
   cp "$foo" newDirectory;
done 

ou se você deseja criar apenas um diretório, o nome é sempre o mesmo:

mkdir newDirectory; find source -name '*.z' -exec cp {} newDirectory \;
    
por 12.10.2013 / 17:52