grep / list bashrecursion

parts = grep "/root/backups/*" for part in $parts do echo $part rm -rf $part #delete done 

我基本上需要遍历一个文件夹,并使用Bash脚本返回文件夹中的每个项目。

无法通过grep工作,虽然可能是一个更简单的方法。 第一行是纯粹的伪线索代码。

这可以很容易地完成,没有循环。

如果你只是想摆脱文件,只需使用rm:

 $ rm -rf /root/backups/* 

如果您想要在删除文件名时显示文件名,请使用find代替:

 $ find /root/backups -maxdepth 1 -mindepth 1 -print -exec rm -rf {} \; 

-maxdepth选项告诉find不会从起点/ root / backups下降一级以上。 -mindepth选项告诉find哪里开始返回结果,有效地告诉find忽略的起点。 -print选项只是将find的文件打印到屏幕上。 用-exec,{}被replace为find的文件,所以这个调用rm来删除它们。

编辑:消除每个评论不必要的执行

将grep命令更改为:

因为我在“ls -bRC1 / path / * ; 做echo $ i; RM $我; DONE

-b将逃离可能导致错误和意外后果的空间和其他字符。 -R是recursion的。 -C1是单列(可能是多余的)。 我会重新考虑-rf

你可能想使用find而不是for循环

find /path -H -maxdepth 3 -type f -mtime +7 -exec rm {} \; -ls

如果您不知道以上选项的含义,请inputman find

grep -l会给你只是文件名

parts = grep -rl ….

你想要一个给定目录中的文件名列表。 有一个程序可以做到这一点,你不好意思读这个名字: ls 。 这就是它! 你想要一个包含子目录中的文件的recursion列表,所以使用ls -R 。 你可以把它的输出放到脚本中的一个variables中,然后按照你的要求去做。