Per*_*-lk 0 directory bash truncate
是否有一些优雅/简单的方法来删除文件夹的内容,如果它是空的,没有错误输出?
以下命令
$ rm -r $dir/*
Run Code Online (Sandbox Code Playgroud)
如果目录为空,则不起作用,因为在这种情况下,wilcard *未展开,并且您收到错误消息,指出rm无法找到文件*.
当然,标准方法是检查它是否为空(带ls $dir | wc -w或find $dir -link 2或任何其他相关命令),否则删除其内容.
有没有另一种方法不检查文件夹内容而只是"截断"目录?
只是,
$ rm -rf dir/*
Run Code Online (Sandbox Code Playgroud)
(默认情况下我相信)Bash并没有抱怨没有找到任何关于glob的东西.它只是将你的文字glob传递给你的命令:
$ echo dir/*
dir/*
Run Code Online (Sandbox Code Playgroud)
当rm找不到具有文字glob字符的文件名时,它会抱怨找不到要求删除的文件:
$ rm "dir/*"
rm: cannot remove ‘dir/*’: No such file or directory
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
但如果你强迫它,它不会抱怨:
$ rm -f "dir/*"
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
我不知道这种抱怨是否是POSIX.
但请注意,如果您没有设置shell选项"dotglob",那么您将错过以点,AKA"隐藏"文件开头的文件.
默认情况下,Zsh不传递文字glob.你必须用" set -o nonomatch" 来要求它.
$ echo dir/*
zsh: no matches found: dir/*
$ echo $?
1
$ set -o nonomatch
$ echo dir/*
dir/*
Run Code Online (Sandbox Code Playgroud)
为了兼容性,我不会使用上面的现代Bash特定的" rm -rf dir/*",但会使用更通用,广泛兼容的解决方案:
$ find dir -mindepth 1 -delete
Run Code Online (Sandbox Code Playgroud)
查找"dir"中最小深度为1的所有文件("dir"本身位于深度0),然后删除它们.
| 归档时间: |
|
| 查看次数: |
2408 次 |
| 最近记录: |