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中,然后按照你的要求去做。