【问题标题】:delete all folders and files within a linux directory except one folder and all contents inside that folder删除 linux 目录中的所有文件夹和文件,除了一个文件夹和该文件夹中的所有内容
【发布时间】:2018-05-19 12:44:26
【问题描述】:

我有一个目录结构:-

/usr/testing/member/
   ---> public--->folder1--->file1
           \----> file2
   ---> folder3:- contains files and folders
   ---> folder4:- contains files and folders
   ---> several files

我想保留公用文件夹及其所有内容(其中的其他文件夹和文件),但想删除目录 /usr/testing/member/ 下的所有其他内容。但这也意味着不会删除成员文件夹。 是否有任何 shell 脚本或命令可以完全按照我所说的那样实现。

【问题讨论】:

  • 你试过什么?我们这里的大多数人都很乐意帮助你提高你的手艺,但作为短期无偿编程人员不太乐意。查看how-to-ask,在MCVE 中向我们展示您迄今为止的工作、您期望的结果和您得到的结果,我们将帮助您解决问题。

标签: linux bash shell directory


【解决方案1】:

这是一种方法:

(cd /usr/testing/member; find . -maxdepth 1 \( ! -name . -a ! -name public \) -exec echo rm -fr {} +)

即:cd进入/usr/testing/member,找到那里的所有文件和目录,下面不再赘述,排除当前目录(“.”)和任何名为“public”的文件或目录,执行命令找到的文件。

这将打印要删除的内容。 验证它看起来不错,然后删除 echo

【讨论】:

    【解决方案2】:

    我认为下面会完成这项工作,

    $ cd  /usr/testing/member/
    $ rm -rf $(ls | grep -v "public")
    

    解释:

    我们通过使用-v(exclude)grep 选项将/usr/testing/member/public 中的所有内容传递给rm

    【讨论】:

    • 但是这个并没有删除/usr/testing/member/里面的文件
    • 对不起,但我很确定,它将删除“/usr/testing/member/”中的文件和目录,除了“public”目录及其子内容。我看不出它不会特别删除文件的原因。
    • 很抱歉不同意,但我确信它会删除“/usr/testing/member/”中的文件和目录,但“public”目录除外。
    • 刚刚创建了一个目录结构,文件遍地都是,除了公共的,所有的东西都被删除了。有效,点赞。
    • 它也会错过/usr/testing/member/foo/public_html/,并且如果任何文件的名称中包含空格或换行符,它会大声失败(并且可能很危险)。 parse ls 从来都不是一个好主意。即使它在某些情况下有效,它也会养成坏习惯,将来可能会严重咬你。
    猜你喜欢
    • 2011-01-14
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多