假设我要删除文件夹中大于1 MB的所有文件。
$ find . -size +1M | xargs -0 rm
这不会删除名称中带有空格的文件。因此,我希望它引用发送给的所有参数rm
。如果find
给出,Some report.docx
则应传递"Some report.docx"
给rm
。
我怎样才能做到这一点?
假设我要删除文件夹中大于1 MB的所有文件。
$ find . -size +1M | xargs -0 rm
这不会删除名称中带有空格的文件。因此,我希望它引用发送给的所有参数rm
。如果find
给出,Some report.docx
则应传递"Some report.docx"
给rm
。
我怎样才能做到这一点?
Answers:
使用简单:
find . -size +1M -delete
如果你坚持使用xargs
,并rm
用find
,只需添加-print0
在您的命令:
find . -size +1M -print0 | xargs -r0 rm --
另一种方式:
find . -size +1M -execdir rm -- {} +
来自man find
:
-print0
True; print the full file name on the standard output, followed by a null
character (instead of the newline character that -print uses). This allows file names
that contain newlines or other types of white space to be correctly interpreted by
programs that process the find output. This option corresponds to the -0 option of
xargs.
"Some report.docx"
给rm
。你想要的是Some report.docx
毫发无损地传递给rm
。KasiyA的答案(现在)显示了使用的一般方法find
。[KasiyA:对于之前的错误ping感到抱歉。]
$0
和$1
等
xargs -0
代替xargs -r0
。
xargs
。另外,正如Wiki所建议的那样,请在不将xargs
传递-print0
给的情况下使用find
。