[英]Remove only files in directory on linux NOT directories
可以运行什么删除命令来仅删除给定目录中的文件
有些文件没有扩展名,所以rm *.*
不起作用...
该文件夹中有数千个文件。
有什么建议吗?
find PATH -maxdepth 1 -type f -delete
但是这不会提示你输入什么它只是删除确认或输出。 因此最好先在没有 -delete 操作的情况下运行它并检查它们是否是正确的文件。
您可以将find
与-type f
仅用于文件,将-maxdepth 1
用于find
,因此find
不会在/path/to/directory
的子目录中搜索文件。 rm -i
会在每次删除时提示您,以便您确认或拒绝删除。 如果您不关心每次删除都被要求确认,请将其更改为rm -fv
( -f
表示强制删除)。 -v
标志使得每次删除时都会打印一条消息,说明刚刚删除了什么文件。
find /path/to/directory -maxdepth 1 -type f -exec rm -iv {} \;
这应该满足以下标准:
非目录
非子目录
NOT 文件在这些子目录中。
由于这在谷歌搜索中很高,最简单的答案是:
rm $directoryPath/*
其中 $directoryPath 是您要清空的目录。 积分应该转到 cbm3384(出于某种原因,这个答案得到了反对票,为什么?)
如果您不想确认:
rm -f $directoryPath/*
如果你不相信试试man rm
或
mkdir -p 1/2/3; echo 'hello1' > 1/hello1.txt; echo 'hello2' > 1/2/hello2.txt;echo 'hello3' > 1/2/3/hello3.txt
rm 1/2/*
上面创建了一个目录结构,在每个文件夹中都有 'helloX.txt'(X 是目录级别)。 rm 1/2/*
删除hello2.txt
并保持其他结构不变。
另外rm */*/*
只删除hello2.txt
。 它是唯一与模式匹配的。
只是一个清理 cakephp tmp-directory 并保持目录结构完整的 Makefile 示例:
clean:
-rm -f tmp/*
-rm -f tmp/*/*
-rm -f tmp/*/*/*
-rm -f tmp/*/*/*/*
rm
前面的减号表示“不要因错误而停止”(未删除的目录返回错误)。 如果您想保存某个级别,只需删除该行,例如第二个 rm 行删除日志。
如果您的系统可以执行其他操作(BSD?),请告诉我。
编辑:我在 ubuntu 12.04、osx lion 和 sourceforge.net shell 上对此进行了测试。 所有的行为都像上面的解释。
rm
默认不会删除目录。 因此,在您的示例中,假设您位于父目录中并且这些是所有文件,您只需要:
rm *
find . -maxdepth 1 -type f -delete
没什么大不了的,但上面的建议对我不起作用,因为......
find . -type f -maxdepth 1 -delete
find: 警告:您在非选项参数 -type 之后指定了 -maxdepth 选项,但选项不是位置性的(-maxdepth 影响在它之前指定的测试以及在它之后指定的测试)。 请在其他参数之前指定选项。
rm dirname/*
? 没有-f
它不会强制删除,没有-r
它不会递归和删除目录和文件。
rm -f dirname/*
将只删除文件而不提示每个文件。 它还将为每个子目录显示"Cannnot remove 'subdirname': Is a directory"
。
为此,我将使用最大深度为 1 的 find ,然后使用文件列表执行 rm 。
find ./dir -maxdepth 1 -type f -exec rm -rf '{}' \;
编辑:这与詹姆斯发布的内容基本相同,但直到之后我才看到他的帖子
它可以与以下命令一起使用
rm -r 'path/of/the/folder/'
mkdir 'path/of/the/folder/'
对我有用的是一个 PERL 脚本:
perl -e 'chdir "subdirectory_name" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'
从您要清理的目录向上运行此一级:将“subdirectory_name”替换为目录名称。
在不杀死 CPU 的情况下处理数百万个文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.