рекурсивно перемещать папки с помощью 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