我花了相当多的时间试图找到一种方法,在 Linux 中使用
find
、tail
、xargs
和 mv
将文件夹移出多个文件夹。我的“一个”衬里可以工作,但它相当丑陋且效率低下,因为重复代码。
这就是有效的:
find /volume/downloads/ -maxdepth 1 -type d -mtime -30 | tail -n1 | xargs -i echo "{}" \
&& find /volume/downloads/ -maxdepth 1 -type d -mtime -30 | tail -n1 | xargs -i \
mv "{}" /archives/recent/downloads/
第一个查找显示要移动的文件夹,第二个查找执行移动。
有人建议如何以更优雅的方式移动此文件夹并发送消息吗?
编辑 这个想法是将文件夹从一台服务器移动到另一台服务器(其中一个安装在第一个服务器中)。每天从
cron
调用的一个班轮,每天只会移动一个文件夹,从服务器 A 到服务器 B。但我需要正在移动的文件夹的反馈。我想在屏幕上显示它。
鉴于您现有的代码可以工作,这可能就是您想要做的(未经测试):
find /volume/downloads/ -maxdepth 1 -type d -mtime -30 | tail -1 | xargs -i bash -c 'echo "{}"; mv -- "{}" /archives/recent/downloads/'
尝试
find /volume/downloads/ -mindepth 1 -maxdepth 1 -type d -mtime -30 -print -exec mv -- {} /archives/recent/downloads/ \; -quit
-mindepth 1
是为了防止代码尝试移动/volume/downloads/
。-print
导致 find
本身打印正在移动的路径,从而避免在 shell 代码中需要 echo
(或者更好的是 printf
)。另一种方法是删除此选项并使用 -v
选项和 mv
。-quit
会在 find
执行成功后立即导致 mv
退出,确保它只会移动一个目录。