rm -rf /some/path/*
删除该目录(和子目录)中的所有非隐藏文件。
rm -rf /some/path/.*
删除该目录(但不是子目录)中的所有隐藏文件,并给出以下错误/警告:
rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'
Run Code Online (Sandbox Code Playgroud)
在目标目录中递归删除所有隐藏和非隐藏文件和文件夹而不收到关于.
and的警告/错误的正确方法是什么..
?
Gil*_*il' 116
*
匹配所有非点文件,.[!.]*
匹配除.
和 名称以 开头的文件之外的所有点文件..
,并..?*
匹配除..
. 它们一起匹配除.
和之外的所有文件..
。如果这三个模式中的任何一个都不匹配,它就会扩展到自己;rm -f
不关心不存在的参数,所以这无关紧要。
rm -rf ..?* .[!.]* *
Run Code Online (Sandbox Code Playgroud)
您也可以使用find
. 这更复杂,但即使有太多文件,上面的通配符会扩展到超出系统命令行长度限制,它也有工作的优势。
find . -name . -o -prune -exec rm -rf -- {} +
Run Code Online (Sandbox Code Playgroud)
您可能会发现删除并重新创建目录更清晰。即使另一个程序同时在原始目录中创建文件,这也具有导致空目录的优点(或缺点,视情况而定)。
evi*_*oup 52
您可以随时将错误消息发送至 /dev/null
rm -rf /some/path/.* 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
你也可以
rm -rf /some/path/
mkdir /some/path/
Run Code Online (Sandbox Code Playgroud)
...那么您首先就不必费心处理隐藏文件。
小智 26
刚刚意识到这是大多数 Linux 发行版中最方便的方法:
ls -A1 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
在哪里
-A
= 列出除 .
和之外的所有内容..
-1
= 将所有项目放在一行中
Ign*_*ams 22
要么更改dotglob
shell的选项并使用*
,要么使用类似find
.
find somedir -mindepth 1 -delete
Run Code Online (Sandbox Code Playgroud)
这应该像@Gilles 的回答一样工作,但更紧凑:
rm -rf {,.[!.],..?}*
Run Code Online (Sandbox Code Playgroud)
或者
rm -rf dir/to/files/{,.[!.],..?}*
Run Code Online (Sandbox Code Playgroud)
if
为了安全起见,还应该在脚本中添加一个for 用法:
if [ -d "$DIR" ]; then
rm -rf ${DIR}/{,.[!.],..?}*
fi
Run Code Online (Sandbox Code Playgroud)
我建议你尝试
了转向ON 点(隐藏文件)
放 dotglob
shopt -s dotglob
了转向OFF 点
未设置 dotglob
shopt -u dotglob
这种方法恰好担任我希望一个副本唯一缺少的隐藏目录命令。
shopt -s dotglob
cp -rvn ./$from/* ./$too/
shopt -u dotglob
Run Code Online (Sandbox Code Playgroud)
所以我做了一个删除(删除),哎呀......
shopt -s dotglob
rm -fr ../message_splitter--044a/*
shopt -u dotglob
Run Code Online (Sandbox Code Playgroud)
……这也行!
我突然想到您亲爱的读者看不到message_splitter
目录。无论如何,它都有一个.svn
需要删除的文件夹,并复制到其中。
从man
页面...
dotglob
如果设置,bash 将包含以“.”开头的文件名 在路径名扩展的结果中。
参考:
在目标目录中递归删除所有隐藏和非隐藏文件和文件夹而不收到有关 . 和 ..?
假设有问题的目录是./dir
,那么
rm -rf ./dir
Run Code Online (Sandbox Code Playgroud)
将递归地删除 中的所有文件./dir
,包括隐藏文件和目录,并包括./dir
目录本身。
如果您不想删除目录本身,那么您可以稍后重新创建它,或者使用
find ./dir -mindepth 1 -delete
Run Code Online (Sandbox Code Playgroud)
或者如果您find
不支持-delete
,
find ./dir -mindepth 1 -depth -exec rm -rf {} ';'
Run Code Online (Sandbox Code Playgroud)
使用-mindepth 1
允许您保留顶级目录./dir
。