仅删除linux NOT目录中目录中的文件

时间:2011-10-10 15:13:59

标签: linux

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

  • NOT目录
  • NOT子目录
  • 这些子目录中的NOT文件。

某些文件没有扩展程序,因此rm *.*无法正常工作...

此文件夹中有数千个文件。

有什么建议吗?

10 个答案:

答案 0 :(得分:47)

您可以将find-type f仅用于-maxdepth 1find/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)

TL; DR:

find . -maxdepth 1 -type f -delete

ETC:

没什么大不了的,但上面的建议对我不起作用,因为......

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的情况下处理了数百万个文件。