рекурсивно перемещать папки с помощью find

Пожалуйста, ознакомьтесь с проблемой ниже. На самом деле я хотел переместить только папку 20022021 (которая содержит подкаталог и файлы) в пункт назначения, но при этом перемещаются оба каталога.

      nasa:/# find /tmp/source -mindepth 1 -mtime -1 -exec mv -t /tmp/destination/ {} \;
find: ‘/tmp/source/20022021’: No such file or directory
find: ‘/tmp/source/21022021’: No such file or directory
nasa:/# cd /tmp/destination/
nasa:/tmp/destination/# ls
20022021  21022021
nasa:/tmp/destination# ls -lrt
total 8
drwxr-xr-x 3 root root 4096 Feb 20 13:27 20022021
drwxr-xr-x 2 root root 4096 Feb 21 06:35 21022021

Я попробовал использовать -mtime +1, но он не перемещает ни один из каталогов и остается в самом источнике. Подскажите, пожалуйста, в чем здесь проблема

      nasa:/# find /tmp/source -mindepth 1 -mtime +1 -exec mv -t /tmp/destination/ {} \;
nasa:/# cd /tmp/source
nasa:/tmp/source# ls
20022021  21022021
nasa:/tmp/source# ls -lrt
total 8
drwxr-xr-x 3 root root 4096 Feb 20 13:27 20022021
drwxr-xr-x 2 root root 4096 Feb 21 06:35 21022021
nasa:/# cd /tmp/destination/
nasa:/tmp/destination/# ls -lrt
total 0

1 ответ

Вы увидите свою проблему, если измените-execк-exec echo, это напечатает выполняемые вами команды. Сообщение об ошибке связано с тем, что вы сканируете подкаталоги таких папок, как/tmp/source/20022021что вы уже переехали:

       find: ‘/tmp/source/20022021’: No such file or directory

Исправьте с помощьюfind -maxdepth 1чтобы после проверки папки верхнего уровня ее подкаталоги не сканировались/перемещались позже, или если вы хотите сканировать подкаталоги, добавьте-pruneдо конца строки, чтобы, если каталог верхнего уровня не был перемещен, find перешел в подкаталоги.

      find /tmp/source -mindepth 1 -maxdepth 1 -mtime -1 -exec mv -t /tmp/destination/ {} \;

find /tmp/source -mindepth 1 -mtime -1 -exec mv -t /tmp/destination/ {} \; -prune
Другие вопросы по тегам