bash - 删除所有文件但将所有目录保留在 bash 脚本中?

标签 bash shell

我正在尝试做一些可能非常简单的事情,我有一个目录结构,例如:

dir/
    subdir1/
    subdir2/
        file1
        file2
        subsubdir1/
            file3

我想在 bash 脚本中运行一个命令,该命令将递归地删除目录中的所有文件,但保留所有目录。即:

dir/
    subdir1/
    subdir2/
        subsubdir1

对此合适的命令是什么?

最佳答案

find dir -type f -print0 | xargs -0 rm

find 以递归方式列出给定目录中与特定表达式匹配的所有文件。 -type f 匹配常规文件。 -print0 用于使用 \0 作为分隔符打印名称(因为任何其他字符,包括 \n,可能在路径名中) . xargs 用于从标准输入收集文件名并将它们作为参数。 -0 是为了确保 xargs 能够理解 \0 分隔符。

如果参数列表太大,

xargs 足够明智地多次调用 rm。所以这比尝试调用某事要好得多。像 rm $((find ...)。而且它比为每个文件本身调用 rm 快得多,比如 find ... -exec rm\{\}.

关于bash - 删除所有文件但将所有目录保留在 bash 脚本中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280429/

相关文章:

linux - Bash 验证日期

bash - 循环代码直到用户输入成功

shell - 如何使用 CURL 将现有文件 append 到文件中?

linux - 将输出和错误重定向到 #/bin/sh 中的日志文件和控制台

linux - 设置除/bin/sh 以外的 Linux shell 是否有问题?

linux - Bash 脚本 - 确定供应商和安装系统(apt-get、yum 等)

linux - 到二进制文件的软链接(soft link)始终使用主文件夹路径(而不是当前文件夹)

linux - 如何在 Bash 脚本中使用 Awk [有问题]?

linux - 为什么 'tail' 命令在使用 -c+1 或 -c-1 时返回整个文件内容?

android - 什么是 Android ADB shell "dumpsys"工具,它有什么好处?