如何删除除2个带有shell脚本的文件夹以外的文件夹中的所有文件或子文件夹(两者)

时间:2017-05-26 10:06:25

标签: shell command-line sh

我想知道如何删除文件夹的所有内容(它包含其他文件夹和一些文件),除了2个文件夹及其内容

以下命令会保留文件夹 conf 并删除所有其他文件夹

  找到。 ! -name'conf'-type d -exec rm -rf {} +

我试图像下面那样管道它

  找到。 -maxdepth 1-type d! -name'conf'|找到。 -maxdepth 1-type d! -name'foldername2'

但没有奏效。

是否可以使用单个命令

2 个答案:

答案 0 :(得分:0)

您还没有指定您正在使用哪个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部分打印匹配而不是删除所有内容。

答案 1 :(得分:0)

我的小程序实用程序可以帮助你。我希望如此。

首先,您应该找到文件.sh的路径 然后你应该找到包含那些文件.sh文件夹 然后删除除那些文件夹之外的任何内容

我写了drr这样的目的,它可以轻松完成这样的任务

drr,代表:根据D语言中的正则表达式删除或重命名文件。所以你必须在使用之前编译它。

见截图:

how to use drr

  

请注意,因为这不适合初学者。