parts = grep "/root/backups/*"
for part in $parts
do
echo $part
rm -rf $part #delete
done
我基本上需要遍历一个文件夹并使用 Bash 脚本返回文件夹中的每个项目。
无法通过 grep 工作,尽管这可能是一种更简单的方法。第一行是纯伪无线索代码。
答案1
无需循环就可以轻松完成。
如果您只是想删除文件,只需使用 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 选项只是将找到的文件打印到屏幕上。使用 -exec,{} 将被找到的文件替换,因此这会调用 rm 来删除它们。
编辑:删除了每个评论中不必要的 -exec
答案2
将 grep 命令更改为:
对于 i 在 ``ls -bRC1 /path/* 中
;执行 echo $i;rm $i;完成
-b 将转义空格和其他字符,这些字符可能会导致 rm 出现错误和意外后果。-R 是递归的。-C1 是单列(可能是多余的)。我会重新考虑 -rf
你可能想使用 find 而不是 for 循环
find /path -H -maxdepth 3 -type f -mtime +7 -exec rm {} \; -ls
如果您不知道上述选项的含义,请输入man find
。
答案3
grep -l 将只返回文件名
部分 = grep -rl ....
答案4
您想要给定目录中的文件名列表。有一个程序可以做到这一点,而且您可能很难读懂它的名字:ls
。这就是它的全部功能!您想要一个包括子目录中文件的递归列表,因此请使用ls -R
。您可以将其输出放入脚本中的变量中,然后根据需要使用它。