【问题标题】: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
    那么你应该找到包含这些文件的 ma​​in 文件夹.sh
    然后删除除这些文件夹之外的任何内容

    我写drr的目的是让它可以如此轻松地完成这样的任务

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

    看截图:

    请小心,因为这不是适合初学者的工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多