我得到的最接近的是

# rm /path/to/directory/*.*


,但这不适用于没有扩展名的文件...

评论

请参阅此处的答案,这也可以删除隐藏文件,而不会发出任何警告并删除目录本身stackoverflow.com/questions/43832107/…

#1 楼

Linux不使用扩展名。由文件的创建者决定名称是否应具有扩展名。 Linux会查看前几个字节,以弄清它正在处理哪种文件。



要删除目录中的所有非隐藏文件*,请使用:

rm /path/to/directory/*


但是,这将为每个子目录显示一个错误,因为在此模式下仅允许删除文件。


要删除目录中的所有非隐藏文件和子目录(及其所有内容),请使用:

rm -r /path/to/directory/*



*隐藏文件和目录的名称以.(点)字符开头,例如:.hidden-file.hidden-directory/。请注意,在Bash中,如果设置了dotglob选项(默认情况下处于关闭状态),则rm也将作用于隐藏文件,因为当shell扩展*以提供文件名参数列表时,它们将被包含在内。 />

评论


如果您还想删除隐藏文件,请在运行rm(...)之前运行shopt -s dotglob

– danjjl
2011年9月6日在8:10

*表示所有文件;)*。*表示所有包含。的文件。名字的某处

–灵风
2011年9月6日在8:20

@Rinzwind,更准确地说,星号表示“零个或多个字符”。所以* a *表示零个或多个字符,后跟零个或多个字符。它将匹配文件名happy,apple,a或la。

–心怀不满的山羊
2011年9月6日下午13:43

@ user784637你太容易被打动

– barlop
2014年9月3日,16:10

我只会用rm -r / path / to / directory,否则会摆脱目录本身。至少通过这种方式,您也可以摆脱隐藏文件

–科洛布峡谷
16-09-22在18:41



#2 楼



要删除包含所有内容的文件夹(包括所有内部文件夹):
rm -rf /path/to/directory



要删除文件夹的所有内容(包括所有内部文件夹),但不包括文件夹本身:
rm -rf /path/to/directory/*

,或者,如果要确保还删除了隐藏的文件/目录:
rm -rf /path/to/directory/{*,.*}



要删除文件夹中的所有“文件”(不删除内部文件夹):
rm -f /path/to/directory/{*,.*}



警告:如果路径中有空格,请确保始终使用引号。
rm -rf /path/to the/directory/*

等效于2个单独的rm -rf调用:
rm -rf /path/to
rm -rf the/directory/*

为避免此问题,可以使用'单引号'(防止所有扩展,甚至外壳变量)或"双引号"(允许扩展外壳变量,但防止其他扩展):
rm -rf "/path/to the/directory/"*

其中:


rm-代表删除


-f-代表帮助力ul,例如,当您不想被询问/是否要删除存档时,它被提示。

-r-表示递归,表示您要递归浏览每个文件夹并删除所有内容。


评论


除了标记为“已接受”的答案外,我发现这是更全面,更有用的答案。

– inspirednz
16年8月20日在1:58

rm -rf / path / to / directory / *不会删除文件夹中的隐藏文件,例如.htaccess。也许rm -rf / path / to / directory /。?还没试过

–马克·贝瑞(Mark Berry)
17年3月29日在1:33

@MarkBerry rm -rf /path/to/directory/.*

– Lilian A. Moraru
17 Mar 29 '17 at 14:57



@ LilianA.Moraru,我今天做了一些测试。 rm -rf /path/to/directory/.*仅删除指定目录中的隐藏文件。查看@danjjl对@Rinzwind答案的评论,要删除隐藏的文件,请在运行rm -rf / path / to / directory / *之前运行shopt -s dotglob。

–马克·贝瑞(Mark Berry)
17 Mar 29 '17 at 22:59

@lawlist的目的是使它简短而简单,因为人们基本上不希望阅读文章,但我添加了有关单词拆分的警告。请注意,这是普遍现象,并非特定于rm。

– Lilian A. Moraru
18/12/21在8:06

#3 楼

要删除目录中的所有文件(包括隐藏文件和子目录),请运行:

rm -rf /path/to/directory/{*,.*}


评论


这应该是美丽的答案。谢谢!

– Nam G VU
16-09-22在15:53

这个glob是否不匹配“。”和“ ..”呢?

–hertzsprung
17年1月8日在13:28

@hertzsprung-这样做,它会警告您它不能删除./和../,但仍会删除隐藏的文件。

– Ryan Wheale
17年1月31日在21:12

这在Mac控制台上不起作用,隐藏的文件仍在该命令行中。

–agapitocandemor
18年8月21日在8:36

删除当前目录中的所有内容:rm -r $ {pwd)/ {*,。*}

–吉米·阿达罗(Jimmy Adaro)
19年5月14日在21:01

#4 楼

如果只想删除/ path / to /目录中的文件,可以执行

find /path/to/directory -type f -print0| xargs -0 rm 




find /path/to/directory -type f -exec rm '{}' \;


您可以使用find进行加载,优点是您可以列出找到的内容而无需将其通过管道传输到rm,这样您就可以查看在开始之前要删除的内容。

评论


GNU查找为-delete谓词。如果仍要使用-exec,请替换\;。使用+可以将rm调用收集在一起,从而提高效率。

– Enzotib
2011年9月6日12:19在

带有'+'的大量文件会引起问题,因为列表太大,与rm -f *相同。从同一个文件夹中删除大量文件时(以毫秒为单位),这两个都不好:)最后,C ++出现了,并按照目录树中inode的顺序删除了文件。

– Osis
2011年9月6日下午12:53

您确实应该在RM之后添加-。否则,如果您有文件名,则-rf或类似名称将被解释为rm的参数。例如xargs -0 rm-或-exec rm-{} \;

– Richm
2011年9月6日13:52



您还可以为xargs提供-n参数。这将导致它将rm命令拆分为具有最大数量的参数,即'xargs -n 100 -0 rm-'将删除100个大块的文件。

– Richm
2011年9月6日下午13:54

您也可以添加-maxdepth 1以确保find不返回任何子目录中的文件。即找到/ path / to / directory -maxdepth 1 -type f

– Richm
2011年9月6日14:10在

#5 楼

要删除目录中的所有文件和目录(包括隐藏的文件和目录),可以尝试以下操作:



删除文件夹,然后重新创建

rm -rf dir_name && mkdir dir_name



使用find

find dir_name -mindepth 1 -delete  



这里我们指定-mindepth 1排除目录dir_name本身。
看看以下链接:https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

评论


感谢您的建议,我为链接添加了更多说明。

–zeekvfu
13年11月28日在5:04

请小心,因为删除和重新创建文件夹可能会导致此文件夹的权限不同/错误!

– einjohn
15年8月29日在12:20

#6 楼

如果还希望删除所有子目录和目录本身,则可以使用rm -rf /path/to/directory。但请务必在按回车键之前仔细检查您的线路,rm -rf也会引起很多麻烦,例如如果您在具有超级用户权限的情况下不小心在第一个斜杠后插入了一个空格...

#7 楼

由于当我自己搜索此问题时,它始终位于Google的顶部:
其他答案也遇到了不同的问题:


其中一些包括...嘈杂,混乱和烦人。


其中一些会忘记隐藏文件(以点开头的文件)。


它们不会删除


以正确的(最深优先)顺序删除目录。


它们进入其他(挂载)文件系统,而这通常是不希望的。


使用额外的参数很难正确扩展它们(请参见下文)。


因此,要递归删除目录中的所有文件和文件夹,请执行以下操作:
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p
-not \( -path "${DIR}/subdir" -prune \)
" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

请注意,我添加了一个-xdev参数以防止下降到坐骑(例如/proc等)。有一个缺点:似乎它们不是可扩展的gh允许-depth子目录(不引入更多问题)。与这种方法相比,您可以在-delete参数之前插入
q4312078q
,以排除-prune删除其内容。

评论


对于深度优先的订单,可以在其中找到-depth标志。

– Sergiy Kolodyazhnyy
18年5月21日在1:36

嗯...为什么不只将-delete与find一起使用? -delete是深度优先。您已经假设使用-printf可以找到非POSIX,因此您也可以使用-delete或-depth -print0 | xargs -0 rm

–muru
18年5月21日在6:41



@muru:因为我不知道...我会改变它。

–user541686
18年5月21日在6:47

@muru:实际上,看来您的方法不适用于-not \(-path“ $ DIR / subdir” \)...但我的方法可以吗?为什么?

–user541686
18年5月21日在7:00



@Mehrdad那应该怎么办?

–muru
18年5月21日在7:06

#8 楼

如果记得,可以将cd放入目录,然后像在DOS中一样运行命令rm *.*

评论


DOS是用于文件的DEL,而RMDIR是用于清空的目录-隐藏和隐藏文件,并且系统文件必须首先删除那些ATTRIB属性。没有那么简单;)

–埃里克
2015年6月10日在13:03

#9 楼

要删除当前目录,您可以例如使用rm -d ./*

-d指示也删除目录。