如何删除 UNIX 目录中包含特定字符串的所有文件?

如何删除 UNIX 目录中包含特定字符串的所有文件?

我发现几个只要文件名中没有空格就可以运行的例子。不幸的是,我的文件名中有空格(这不是我的选择,事实上我需要删除它们)。

例如,我认为这是可行的:

查找 . -type f | grep ).MOV | xargs rm

因为我想删除如下文件:

  • L112 (1).MOV
  • L113 (1).MOV
  • L113 (2).MOV
  • ETC。

我想保留以下文件

  • L112.MOV
  • L113.MOV
  • L114.MOV
  • ETC。

这样可以正确找到文件:

查找 . -type f | grep ).MOV

但是当我将它通过管道传输到 rm 时,文件名中的空格就把它搞乱了。

任何帮助将不胜感激。

答案1


rm *\).MOV

答案2

告诉xargs使用换行符作为分隔符:

find . -type f | grep ).MOV | xargs -d'\n' rm

更好的是,有find做匹配和使用-print0xargs -0允许任何文件名中的字符,甚至\n

find . -type f -name '*).MOV' -print0 | xargs -0 rm

更好的是,直接find打电话就可以rm

find . -type f -name '*).MOV' -exec rm {} +

最好跳过rmfind删除。

find . -type f -name '*).MOV' -delete

或者在这种特定情况下,谁需要所有重型机械?

rm *\).MOV

答案3

尝试这个:

find . -name "*).MOV" -exec rm {} \;

答案4

在大多数 Unix 安装中,您可以通过在文件名前添加反斜杠来表示空格。例如,尝试以下操作:

mkdir blah
cd blah
touch file1
touch file2
touch "file 3"
touch "file 4"

执行“ls”你应该会看到以下内容:

文件 3 文件 4 文件1 文件2

现在执行“ls *\ *”,你应该看到所有内容中都有空格:

文件 3 文件 4

所以也许你只需要一个“rm *\ *”?或者稍微修改一下正则表达式来满足你的需求。

希望有帮助!

相关内容