老实说,我认为这更像是一个衬里。
概念很简单:在 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
所有参数$dest
。 popd
堆栈中仍处于当前状态的目录。 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