【发布时间】:2011-09-21 16:52:44
【问题描述】:
ls -1 | grep -v images | xargs rm -r
这不会删除其中包含空格的文件。我怎样才能包括它们?当我说 ls 时有没有办法显示转义的空格?
【问题讨论】:
-
find . ! -name '*images*' -type f -print0 | xargs -0 rm -r
ls -1 | grep -v images | xargs rm -r
这不会删除其中包含空格的文件。我怎样才能包括它们?当我说 ls 时有没有办法显示转义的空格?
【问题讨论】:
find . ! -name '*images*' -type f -print0 | xargs -0 rm -r
这应该可以解决问题:
ls -1 | grep -v images | xargs -I {} rm -r "{}"
【讨论】:
虽然您可以使用ls(1) 来完成这项工作,但我认为更好的方法是改用find(1):
find . \! -name '*images*' -exec rm -r {} \;
或
find . \! -name '*images*' -print0 | xargs -0 rm -r
我更喜欢-print0 | xargs -0 方法,因为xargs(1) 只会根据需要生成尽可能多的rm(1) 命令。当您只有 200 个文件时,执行 200 次或执行一次不会有太大区别,但如果您有 10,000 个文件要删除,您真的宁愿只执行 rm(1) 200 或 500 次,而不是全部执行 10,000 次。
【讨论】:
ls 有 -Q 选项来引用它们。然后你可以这样做:
ls -Q | grep -v images | xargs rm -r
【讨论】: