如何移动并在一行中列出多个文件夹

问题描述 投票:0回答:2

我花了相当多的时间试图找到一种方法,在 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。但我需要正在移动的文件夹的反馈。我想在屏幕上显示它。

bash filesystems
2个回答
2
投票

鉴于您现有的代码可以工作,这可能就是您想要做的(未经测试):

find /volume/downloads/ -maxdepth 1 -type d -mtime -30 | tail -1 | xargs -i bash -c 'echo "{}"; mv -- "{}" /archives/recent/downloads/'

0
投票

尝试

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
    退出,确保它只会移动一个目录。
© www.soinside.com 2019 - 2024. All rights reserved.