使用 find 递归移动文件夹

使用 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

相关内容