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

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

Então eu estava dando uma olhada e tudo que descobri é como fazer isso somente se o diretório já estiver criado, que é este:

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

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

find source -name '*.z' -exec cp {} | mkdir newDirectory \;

Responder1

Uma opção é usar o installcomando em vez de cp. Tem a opção de criar todos os diretórios principais.

find source -name '*.z' -exec install -D {} dest \;

Responder2

Vocênão é possível canalizar dadospara mkdiraquele caminho. 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, então o nome é sempre o mesmo:

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

informação relacionada