繁体   English   中英

仅删除linux目录中的文件而不是目录

[英]Remove only files in directory on linux NOT directories

可以运行什么删除命令来仅删除给定目录中的文件

  • 非目录
  • 非子目录
  • NOT 文件在这些子目录中。

有些文件没有扩展名,所以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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM