
Итак, я поискал и нашел только то, как это сделать, только если каталог уже создан, а именно:
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 \;