grep/list bash 递归

grep/list bash 递归
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。您可以将其输出放入脚本中的变量中,然后根据需要使用它。

相关内容