Regex 如何使用正则表达式从Linux终端删除文件夹
假设我有文件夹:Regex 如何使用正则表达式从Linux终端删除文件夹,regex,linux,find,rm,Regex,Linux,Find,Rm,假设我有文件夹: img1/ img2/ 我如何从Linux终端使用正则表达式删除那些文件夹,这些文件夹匹配所有从img开始的内容?您可以使用 rm -r img* 应该从img开始删除当前工作目录中的所有文件和目录 rm -r img*/ 编辑: 仅删除当前工作目录中以img开头的目录 rm -r img*/ 使用查找来筛选目录 $ find . -type d -name "img*" -exec rm -rf {} \; 正如在评论中提到的,这是使用shell globs而不是r
img1/
img2/
我如何从Linux终端使用正则表达式删除那些文件夹,这些文件夹匹配所有从img开始的内容?您可以使用
rm -r img*
应该从img开始删除当前工作目录中的所有文件和目录
rm -r img*/
编辑:
仅删除当前工作目录中以img开头的目录
rm -r img*/
使用查找来筛选目录
$ find . -type d -name "img*" -exec rm -rf {} \;
正如在评论中提到的,这是使用shell globs而不是regexs。如果你想要正则表达式
$ find . -type d -regex "\./img.*" -exec rm -rf {} \;
在寻找如何使用regexps删除目录中的特定文件的过程中,我偶然发现了这篇文章和Mahmoud Mustafa的另一篇文章: 此代码将删除任何内容,包括0-9中的四个连续数字,在我的案例文件夹中,月份和日期范围为2002年1月至2014年1月:
rm -fr `ls | grep -E [0-9]{4}`
希望这能帮助那些四处寻找如何删除单个文件而不是文件夹的人 这还将删除与表达式匹配的任何文件,此命令将删除与表达式匹配的所有文件,而不仅仅是目录。操作说明“所有匹配的文件均以img开头?”如果名称必须以img开头,则应使用
^img.
。如果没有^
字符名,例如中间可能有img。由于我的解决方案没有使用完整的正则表达式,只是使用shell glob通配符,如其他注释所述,在这种情况下记录不会出现这种情况,shell的全局通配符表达式不是正确的正则表达式。改进这一点的一种方法是将-maxdepth 1
添加到find
中,就像find那样-类型d-maxdepth 1-regex“\./img.*-execrm-rf{}”代码>它会更快。我经常使用您的命令来清理生产服务器上的旧备份,但我无法找到一个正则表达式来获取除本月第一个之外的所有文件夹(意味着我希望每个月清除除1个外的所有备份文件夹)。文件夹名称的定义如下:“yyyy.mm.dd.hh.mm.ss”(ex:2016.07.29.03.00.19)。甚至find-键入d-regex“\./2016\.*”
不返回任何内容。。。有什么想法吗?试试查找-类型d-regex“*/2016.*”
{}
替换为文件名和\
标记传递给exec的命令的结束(如果不转义它,它将由shell执行)还提到$find-键入d-regex“^\./img.*$”-exec rm-rf{}+