我想删除每个文件,但保留文件夹结构。有办法吗?
注意:(我使用的是 GNU bash 4.1.5)。
答案1
尝试这个:
find . ! -type d -exec rm '{}' \;
这将删除当前工作目录下的每个文件(不包括目录)。使用此命令时要格外小心。
如果您机器上的版本find
支持,您也可以使用
find . ! -type d -delete
答案2
您可以使用以下命令find
来查找每个文件,但保持目录结构:
$ find /some/dir -type f -exec rm {} +
根据这个标题为 Unix 和 Linux 的问答:gnu 查找并屏蔽某些 shell 的 {} - 哪个?{}
,对于像 Bash 这样的现代 shell ,用单勾 ( )转义'
似乎不再是必要的。
答案3
递归删除当前目录和子目录中每个常规文件的简单方法:
zsh -c 'rm **/*(.)'
只有zsh有通配限定符按类型匹配文件。但是,该rm
命令不适用于目录,因此在 bash 中,您可以使用
shopt -s globstar
rm **/*
这对于除此之外的命令不起作用rm
。一般来说,您可以使用find
:
find . -type f -delete
或者如果你find
不支持-delete
:
find . -type f -exec rm {} +
答案4
我有类似的要求,从路径及其子目录中删除文件(按时间过滤)而不删除目录结构。
我使用了以下对我有用的格式。
查找/test123/home/test_file_hip/data/nfs -mtime +6 -type f -exec rm {} \;
语法:find(文件路径)-mtime(大于或小于天)-type f -exec rm {} \;
-type : 为“d”目录提及文件“f”的类型 -exec : 执行命令 rm : 删除 {} : find 命令的输出
注意:使用前请先测试。如果我遗漏了什么,请随时纠正或更新。