我想知道是否可以指定一些优雅的条件(可能是参数?)rm -rf /folder/*不删除其子文件夹,其中包含名称为“dontshoot.txt”的文件。
到目前为止我找不到任何东西。
在此先感谢您的帮助!
你可以简单地find像这样使用
find some_folder ! -name dontshoot.txt -delete
Run Code Online (Sandbox Code Playgroud)
这将递归删除除文件之外的所有文件和文件夹dontshoot.txt。正如其他评论中所指出的,在不删除的情况下测试它总是有帮助的,这可以像这样简单地完成。
find some_folder ! -name dontshoot.txt
Run Code Online (Sandbox Code Playgroud)
但是,这将列出所有文件夹,即使是那些包含dontshoot.txt但不会被删除的文件夹,因为它们在使用-delete.
编辑:
我同意 fedorqui 对这个问题的解释比我的更合理。只删除不包含dontshoot.txt在其树结构深处的文件夹,一个可怕的低效解决方案是
find some_folder -type d -exec \
sh -c "find {} -name dontshoot.txt | grep -q '' || echo rm -fr {}" \;
Run Code Online (Sandbox Code Playgroud)
解释:
外部find命令通过some_folder查找所有目录 ( -type d) 并执行 ( -exec) 给定的 shell 命令递归遍历,同时替换{}为找到的目录的相对路径。
findshell 中的命令在找到的目录中搜索dontshoot.txt. 如果没有找到任何内容,则不会传递任何输出grep -q '' ,因此将返回False并执行最后一部分,这将dontshoot.txt递归删除完整目录(当然不包含)。
简而言之,它遍历所有目录并删除那些不包含dontshoot.txt在其中某处的目录。
| 归档时间: |
|
| 查看次数: |
3908 次 |
| 最近记录: |