【问题标题】:How to delete all files or Sub-folders (both) in a folder except 2 folders with shell script如何使用shell脚本删除文件夹中的所有文件或子文件夹(两者),除了2个文件夹
【发布时间】:2017-10-27 04:28:02
【问题描述】:
我想知道如何删除一个文件夹的所有内容(它包含其他文件夹和一些文件),除了 2 个文件夹及其内容
以下命令保留文件夹 conf 并删除所有其他文件夹
找到 . ! -name 'conf' -type d -exec rm -rf {} +
我试图像下面这样管道它
找到 . -maxdepth 1 -类型 d ! -name 'conf' |查找。 -maxdepth 1 -类型 d ! -name '文件夹名2'
但没用。
是否可以使用单个命令进行操作
【问题讨论】:
标签:
shell
command-line
sh
【解决方案1】:
您尚未指定您使用的是哪个 shell,但如果您使用的是 bash,那么扩展 glob 会有所帮助:
printf '%s\n' !(@(conf|foldername2)/)
如果您对由此生成的文件和目录列表感到满意,则将相同的 glob 传递给 rm -rf:
rm -rf !(@(conf|foldername2)/)
在脚本中,您可能需要使用 shopt -s extglob 启用 extglob。稍后,您可以将-s 更改为-u 以取消设置该选项。
如果您使用不同的 shell,那么您可以在 find 命令中添加更多选项:
find -maxdepth 1 ! -name 'conf' -a ! -name 'foldername2' -exec rm -rf {} +
先尝试不使用-exec 部分以打印匹配项,而不是删除所有内容。
【解决方案2】:
也许我的小程序实用程序可以帮助你。我希望如此。
首先你应该找到你的文件的路径.sh
那么你应该找到包含这些文件的 main 文件夹.sh
然后删除除这些文件夹之外的任何内容
我写drr的目的是让它可以如此轻松地完成这样的任务
drr,代表:根据D语言的正则表达式删除或重命名文件。所以使用前必须先编译。
看截图:
请小心,因为这不是适合初学者的工具。