我发现几个只要文件名中没有空格就可以运行的例子。不幸的是,我的文件名中有空格(这不是我的选择,事实上我需要删除它们)。
例如,我认为这是可行的:
查找 . -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
做匹配和使用-print0
并xargs -0
允许任何文件名中的字符,甚至\n
!
find . -type f -name '*).MOV' -print0 | xargs -0 rm
更好的是,直接find
打电话就可以rm
。
find . -type f -name '*).MOV' -exec rm {} +
最好跳过rm
并find
删除。
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 *\ *”?或者稍微修改一下正则表达式来满足你的需求。
希望有帮助!