首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除文件名中没有给定字符串的特定扩展名的文件?

如何删除文件名中没有给定字符串的特定扩展名的文件?
EN

Ask Ubuntu用户
提问于 2018-08-11 13:26:06
回答 2查看 3.2K关注 0票数 7

我有一个目录,其中有许多扩展名的文件。我想递归地删除*.srt文件(和*.srt文件),这些文件不以-en.srt结尾( srt是一个扩展名)。我已经想出了下面的解决方案,它似乎很好,但是,我想知道它是否100%正确。

代码语言:javascript
复制
find . -name "*.srt" ! -name "*-en.srt" -type f -exec rm -rf {} \;
EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2018-08-11 13:59:12

<#>!

您的命令是正确的,但是不需要使用-rf作为rm参数。因为您正在删除文件而不是目录。

另一种清晰的编写方法是(它与命令几乎相同):

代码语言:javascript
复制
find -name '*.srt' -and -not -name '*-en.srt' -type f -exec rm '{}' \;

或者,正如@steeldriver建议的那样,您可以使用:

代码语言:javascript
复制
find -name '*.srt' -and -not -name '*-en.srt' -type f -ok rm '{}' \;

它将请求您允许删除每个已创建的文件。

您也可以使用-delete而不是rm {} \;,但是要注意它的危险:

不要忘记,find命令行是作为表达式计算的,因此将-delete放在首位将使find尝试删除您指定的起始点以下的所有内容。在测试以后打算与-delete一起使用的find命令行时,应该显式地指定-depth,以避免以后发生意外。因为-delete意味着-depth,所以不能同时使用-prune和-delete。

在执行实际工作之前测试将要发生的事情总是一个好主意,所以我建议运行:

代码语言:javascript
复制
find -name '*.srt' -and -not -name '*-en.srt' -type f | grep -i en.srt

如果它什么也不返回,那么实际的命令就会正常工作,你就可以.甚至:

代码语言:javascript
复制
find -name '*.srt' -and -not -name '*-en.srt' -type f | less

去检查要移除的东西。

别忘了引用'{}'的话:

(当从shell调用find时)应该引用它(例如'{}'),以保护它不受shell解释的影响。

票数 9
EN

Ask Ubuntu用户

发布于 2018-08-12 07:34:10

让我们只使用bash全局操作:在启用extglobglobstar选项之后,

代码语言:javascript
复制
rm **/!(*-en).srt

删除以.srt结尾的每个文件,不包括当前目录和任何子目录中以-en.srt结尾的任何文件。如果您不确定是否有这样的扩展,可以先使用echo进行测试(参见下面的示例)。

示例

代码语言:javascript
复制
$ tree
.
├── 01.srt
├── 02.srt
├── no-en.srt
├── not-en.srt
├── subdir
│   ├── 01.srt
│   ├── 02.srt
│   ├── no-en.srt
│   └── not-en.srt
└── unrelated.png
$ shopt -s extglob globstar
$ echo rm **/!(*-en).srt
rm 01.srt 02.srt subdir/01.srt subdir/02.srt
$ rm **/!(*-en).srt
$ tree
.
├── no-en.srt
├── not-en.srt
├── subdir
│   ├── no-en.srt
│   └── not-en.srt
└── unrelated.png

Explanations

  • **/ -启用globstar选项将匹配任意数量的目录和子目录
  • !(*-en) -启用了extglob选项,这将匹配除给定模式之外的任何内容,因此没有以-en结尾的任何内容都匹配
票数 4
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1064419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档