可以运行什么删除命令来仅删除给定目录中的文件
某些文件没有扩展程序,因此rm *.*
无法正常工作...
此文件夹中有数千个文件。
有什么建议吗?
答案 0 :(得分:47)
您可以将find
与-type f
仅用于-maxdepth 1
,find
,/path/to/directory
将不会搜索rm -i
子目录中的文件。 rm -fv
会在每次删除时提示您,以便您确认或拒绝删除。如果您不关心被要求确认每次删除,请将其更改为-f
(-v
强制删除)。 find /path/to/directory -maxdepth 1 -type f -exec rm -iv {} \;
标志使得每次删除时都会打印一条消息,说明刚刚删除了哪个文件。
{{1}}
这应该符合标准:
NOT目录
不是子目录
这些子目录中没有文件。
答案 1 :(得分:37)
find PATH -maxdepth 1 -type f -delete
但是这不会提示您确认或输出刚刚删除的内容。因此,最好在没有-delete操作的情况下首先运行它,并检查它们是否是正确的文件。
答案 2 :(得分:14)
由于Google搜索量很高,最简单的答案是:
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上测试了这个。一切都像上面的解释。
答案 3 :(得分:8)
rm
不会删除目录。因此,在您的示例中,假设您位于父目录并且这些都是文件,您只需要:
rm *
答案 4 :(得分:7)
find . -maxdepth 1 -type f -delete
没什么大不了的,但上面的建议对我不起作用,因为......
find . -type f -maxdepth 1 -delete
find:warning:你在非选项参数-type之后指定了-maxdepth选项,但是选项不是位置的(-maxdepth影响在它之前指定的测试以及之后指定的测试)。请在其他参数之前指定选项。
答案 5 :(得分:4)
rm dirname/*
?没有-f
它不会强制删除,没有-r
它不会递归和删除目录以及文件。
答案 6 :(得分:4)
rm -f dirname/*
将仅删除文件而不提示每个文件。它还会为每个子目录显示"Cannnot remove 'subdirname': Is a directory"
。
答案 7 :(得分:1)
为此,我将使用最大深度为1的find,然后使用文件列表执行。
find ./dir -maxdepth 1 -type f -exec rm -rf '{}' \;
编辑:这与詹姆斯发布的内容基本相同,但直到之后我才看到他的帖子
答案 8 :(得分:0)
它可以与以下命令一起使用
rm -r 'path/of/the/folder/'
mkdir 'path/of/the/folder/'
答案 9 :(得分:-1)
对我有用的是PERL脚本:
perl -e 'chdir "subdirectory_name" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'
从您想要清理的目录中运行此级别:将“subdirectory_name”替换为目录名称。
在不杀死CPU的情况下处理了数百万个文件。