"dir / *: нет такого файла или каталога" с find -exec ... "{} / *" - PullRequest
0 голосов
/ 28 сентября 2018

Текущий каталог содержит файлы и каталоги.Каталоги не имеют подкаталогов, но могут содержать ноль или более файлов, например:

./file1
./file2
./directory1/file3
./directory2/file4
./directory2/file5
./directory3/

Когда я выполняю find . -type d -maxdepth 1, я получаю список каталогов:

./directory1
./directory2

Если я выполню mv ./directory1/* ., все файлы в каталоге 1 будут перемещены на текущий уровень ., поэтому я подумал, что могу использовать find -exec, чтобы сделать все за один раз:

find . -type d -maxdepth 1 -exec mv "{}/*" . \;

Но я получаю этот ответ:

mv: rename ./directory1/* to ./*: No such file or directory

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

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Нет необходимости использовать find.Вы можете сделать это с помощью одного mv для перемещения файлов и rmdir для удаления пустых каталогов.

mv */* .
rmdir */
0 голосов
/ 28 сентября 2018

Глобирование (замена foo/* на foo/dirA, foo/dirB и т. Д.) Выполняется оболочкой , а не mv.find -exec не запускает оболочку, если вы не сделаете это вручную;например:

find . -type d -mindepth 1 -maxdepth 1 \
       -exec sh -c 'for dir; do mv -- "$dir"/* .; done' _ {} +
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...