我正在尝试做一些可能非常简单的事情,我有一个目录结构,例如:
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/