可以运行什么delete命令以仅删除给定目录中的文件
- 非目录
- 不是子目录
- 在这些子目录中没有文件。
某些文件没有扩展名,因此rm *.*
无法正常工作...
此文件夹中有数千个文件。
有什么建议吗?
Answers:
您只能将find
with-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 {} \;
这应符合以下条件:
NOT目录
NOT子目录
NOT这些子目录中的文件。
for r in $(find /path/to/directory -type f -maxdepth 1);do rm -v $r;done
find PATH -maxdepth 1 -type f -delete
但是这不会提示您进行确认或输出刚刚删除的内容。因此最好先不使用-delete操作就运行它,并检查它们是否是正确的文件。
-delete
参数-比-1
xargs简单得多。上以及[这个版本] OS X,作品find
是一些* IX分布之间烦人不同。
由于这是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
。这是唯一与模式匹配的。
只是一个makefile的示例,它清除cakephp tmp-directory并保留目录结构不变:
clean:
-rm -f tmp/*
-rm -f tmp/*/*
-rm -f tmp/*/*/*
-rm -f tmp/*/*/*/*
前面的减号rm
表示“不停止错误”(未删除的目录返回错误)。如果要保存某个级别,只需删除该行,例如第二条rm行将删除日志。
让我知道您是否有执行其他操作的系统(BSD?)。
编辑:我在ubuntu 12.04,osx lion和sourceforge.net外壳上对此进行了测试。所有的行为都像上面的解释。
rm -r $path/* 2> /dev/null
在任何情况下您都是对的,这会引发错误,并且抑制所有错误通常是不好的编程。如果将退出状态修改为0(成功),则同样适用。
rm dirname/*
?没有-f
它就不会强行删除,没有-r
它就不会递归删除目录以及文件。
rm -f *
没有不会删除目录-r
。它只是忽略空目录,不要求确认。rm -rf *
也删除目录。
rm -r dirname/
,它确实删除了顶层目录以及所有子目录和文件,而没有任何提示。我尝试过rm -r dirname/*
(带有星号),并且删除了所有子目录和文件,但保留了顶层目录。结论:如果指定,则rm
no-f
将删除目录-r
。
-i
选项的原因。如果我被禁止使用-r
,我会很不高兴,我经常使用它,而不会发生意外。我大部分时间都在命令行上,并且缺少将文件移动而不是删除文件的命令是唯一可以接受的解决方案。即使那样,也需要“最终”删除它们。
rm -f dirname/*
将仅删除文件,而不提示您输入每个文件。它还将为"Cannnot remove 'subdirname': Is a directory"
每个子目录显示。