【发布时间】:2012-08-12 19:07:43
【问题描述】:
假设我有文件夹:
img1/
img2/
如何从 Linux 终端使用正则表达式删除那些匹配所有以 img 开头的文件夹?
【问题讨论】:
-
郑重声明,shell 的 glob 通配符表达式不是正确的正则表达式。
假设我有文件夹:
img1/
img2/
如何从 Linux 终端使用正则表达式删除那些匹配所有以 img 开头的文件夹?
【问题讨论】:
使用 find 过滤目录
$ find . -type d -name "img*" -exec rm -rf {} \;
正如在 cmets 中提到的,这是使用 shell glob 而不是正则表达式。如果你想要正则表达式
$ find . -type d -regex "\./img.*" -exec rm -rf {} \;
【讨论】:
find 中添加-maxdepth 1,这样find . -type d -maxdepth 1 -regex "\./img.*" -exec rm -rf {} \; 会更快。
find . -type d -regex "\./2016\.*" 也没有返回任何东西......有什么想法吗?
find . -type d -regex ".*/2016.*"
{} 被文件名替换,\; 标志着传递给 exec 的命令的结束(如果你不转义它会被 shell 占用)
$ find . -type d -regex "^\./img.*$" -exec rm -rf {} +
你可以使用
rm -r img*
应该删除当前工作目录中以img开头的所有文件和目录
编辑:
只删除当前工作目录中以 img 开头的目录
rm -r img*/
【讨论】:
^img.*。没有^ 字符名称可能有img 例如在中间。
在寻找如何使用正则表达式删除目录中的特定文件的过程中,我偶然发现了这篇文章和 Mahmoud Mustafa 的另一篇文章:http://mah.moud.info/delete-files-or-directories-linux
此代码将删除任何内容,包括 0-9 中的四个连续数字,在我的情况下,月份和日期范围为 Jan2002 至 Jan2014 的文件夹:
rm -fr `ls | grep -E [0-9]{4}`
希望能帮助那些四处寻找如何删除单个文件而不是文件夹的人。
【讨论】: