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 \;
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 \;
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 \;
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 \;