Как найти определенные файлы и переместить их в новый каталог в той же команде?

Как найти определенные файлы и переместить их в новый каталог в той же команде?

Итак, я поискал и нашел только то, как это сделать, только если каталог уже создан, а именно:

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

Но как мне создать новый каталог, куда я хочу отправить эти файлы в той же команде? Вот что я пробовал, но безуспешно:

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

решение1

Одним из вариантов является использование installкоманды вместо cp. Она имеет опцию создания всех ведущих каталогов.

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

решение2

Тыне могу передавать данныев mkdirэтом направлении. Вы можете сделать что-то вроде этого:

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

или (предполагается, что имена файлов не содержат символов новой строки)

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

или если вы хотите создать только один каталог, то имя всегда будет одинаковым:

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

Связанный контент