是否可以使用 CLI,在这种情况下 bash 来查找一个集合,获取一个集合,移动它,而不必编写一个库来这样做



老实说,我认为这更像是一个衬里。

概念很简单:在 Mac OS X 上使用 find,找到符合条件的文件,在我的例子中:目录中的所有文件和目录: find ~/Downloads +time1000s

找到我需要的东西,然后我运行一个条件,如果存在目录,请删除它,如果没有,请创建它:姆克迪尔 -p ~/.垃圾/安全删除这些旧文件

这意味着我需要将 print0 添加到我的查找中,因为文件将有空格,并且我想移动,而不是复制,但无论哪种方式,都有一个源和一个目的地,但我卡住了:

https://gist.github.com/5c0tt/5a2c1fd39ae99d6fca05第 27 行和第 26 行似乎给我带来了问题,我卡住了。

对从第 1 行到最后的每个人的建议。 我正在努力做到这一点,考虑到 POSIX,但我什至无法让变量工作。

似乎 BSD 的工作方式与其他 shell 以及它们接受的参数并不完全相同,这就是为什么我试图变得更加 POSIX,因为我被告知它应该在任何地方运行。

谢谢。

看了一眼你的 git 链接,如果可以的话,有几句话(仍然是一个菜鸟 tbh,所以可能无关紧要):

dir_to_clean="/Users/my_username/Downloads"可能应该dir_to_clean="/Users/$current_user/Downloads",除非您实际上有一个文字/Users/my_username/Downloads文件夹。

而不是cd你的用户目录,因为你已经硬编码了该目录的路径,你可以使用 pushd & popd 来构建一堆目录。

回答您的问题,要捕获名称中包含空格的文件以进行删除,您可以使用以下内容:

find $dir_to_clean -not -name . +time1000s -exec mv -- {} ~/.Trash/

可能是这样的

# Initialise variables, user, source to clean, destination
user=$(whoami);
src="/Users/$user/Downloads";
dest="~/.Trash/safe_to_delete";
# Move to directory to clean, not necessary, but if you really want to
pushd $src;
# Check if the destination exists, if not, create it 
if [ ! -d $dest ]; then
    mkdir -p $dest;
else
    echo "destination already exists";
fi
# Find all the file to move then move them
find . -not -name . +time1000s -exec mv -- {} "$dest/" ;
# Return to previous working directory 
popd;

$src目录pushd到堆栈上。 find当前目录中的所有文件.-not -name .为了避免试图删除...文件夹,--告诉find停止解析命令行选项(在cas中,您的文件/文件夹被命名为-myfile.txt),exec mv所有参数$destpopd堆栈中仍处于当前状态的目录。 man find/exec ) 了解更多详情。

注意:有趣的是,-exec选项与通过管道传输到xargs的结果之间的执行时间差异可能而且通常会非常显着。此外,如果您确实确定这些文件safe_to_delete,请删除它们而不是移动它们(-exec rm -- {} $dest/)。综上所述,你是对的,一个班轮。

延伸阅读 :http://www.softpanorama.org/Tools/Find/using_exec_option_and_xargs_in_find.shtml

最新更新