【问题标题】:How to delete only directories and leave files untouched如何仅删除目录并保持文件不变
【发布时间】:2011-08-22 15:05:24
【问题描述】:

我在一个目录中有数百个目录和文件。

只删除目录的最佳方法是什么(无论目录是否有任何内容,都将它们全部删除)

目前我使用ls -1 -d */,并将它们记录在一个文件中,然后执行sed,然后运行它。它相当长的路。我正在寻找仅删除目录的更好方法

【问题讨论】:

    标签: unix directory rm


    【解决方案1】:

    要删除所有目录和子目录,只保留工作目录中的文件,我发现这个简洁的命令对我有用:

    rm -r */
    

    它使用 bash 通配符 */,其中星号后跟斜杠将仅匹配目录和子目录。

    【讨论】:

    • 跳过y/n个问题:rm -rf */
    • 在脚本中使用它时请记住扩展,因为星号不会在引号中扩展。照原样,它应该可以正常工作。 unix.stackexchange.com/questions/156534/…
    • 这是投票率最高的答案,但我正在对此进行测试,因为我正在尝试做同样的事情,但我认为这个答案只是删除了所有内容,并没有按照原始问题的要求进行。使用时要小心。 Catalint/Jeremy 的个人资料回答更好地解决了这个问题,至少对我而言。我的情况是我有一些文件夹,其中包含我想要保留的文件,还有一堆我想要删除的空垃圾文件夹,因此基于 find . -maxdepth 1 -mindepth 1 -type d 的命令是一个更好的选择
    • @Gi0rgi0s:我赞成你的观点,但rm -rf ./*/距离rm -rf /*/仅一个字符
    • @JerzyBrzóska 这是一个 bash 通配符,我在答案中添加了注释
    【解决方案2】:

    find . -maxdepth 1 -mindepth 1 -type d

    然后

    find . -maxdepth 1 -mindepth 1 -type d -exec rm -rf '{}' \;

    添加解释:

    find 由于. 而在当前目录中开始,并且仅在-maxdepth-mindepth 都设置为1 时停留在当前目录中。 -type d 告诉 find 只匹配目录。

    find 也有一个-exec 标志,可以将其结果传递给另一个函数,在本例中为rm'{}' \; 是传递这些结果的方式。 See this answer for a more complete explanation of what {} and \; do

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 回答问题的额外上下文将显着改善其长期价值。请edit你的答案添加一些解释。
    【解决方案3】:

    首先,运行:

    find /path -d -type d
    

    为了确保输出看起来正常,然后:

    find /path -d -type d -exec rm -rf '{}' \;
    

    -type d 只查找目录,然后-d 确保将子目录放在父目录之前。

    【讨论】:

    • 第一个命令甚至对我不起作用。 > 找到 . -d -type -d find:警告:-d 选项已弃用;请改用 -depth,因为后者是符合 POSIX 的功能。查找:无效参数 -d 到 -type
    • @Anthony 你有一个额外的连字符。应该是find /path -d -type d
    • 很棒的答案!
    【解决方案4】:

    简单的方法:-

    rm -rf `ls -d */`
    

    【讨论】:

    • 正如其他人评论的那样,如果您的目录名称包含空格,这将不起作用。
    【解决方案5】:

    一行:

    rm -R `ls -1 -d */`
    

    (反引号)

    【讨论】:

    • 不要通过管道输出ls尤其是不要rm -r。当路径名包含空格时会失败。
    • 没有考虑空间问题。会记得的。
    • 更多推荐和简单this answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2011-10-12
    • 1970-01-01
    • 2017-07-24
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多