要使用grep
查找某些文件并使用rm
删除它们,我尝试使用以下命令-
$ ls | grep 2019 | xargs -i rm \"{}\"
那没有用。得到了以下错误消息-
rm: cannot remove '"2019-05-10 00:00:00-TO-2019-05-10 23:59:59_PDT_disconnection_info.csv"': No such file or directory
看起来xargs
确实是引号。因此,尝试echo
而不是直接传递-
ls | grep 2019 | xargs -i echo \"{}\" | xargs rm
这行得通。
为什么不进行echo
处理就不能使用?
答案 0 :(得分:1)
正确的引用由xargs
完成,无需再次引用。只是:
... | xargs -i rm {}
或者更好,因为rm接受多个参数,只需执行以下操作:
... | xargs rm
为什么不回声就不起作用?
当不与-i,-I,-d或类似符号一起使用时,xargs
实用程序可处理输入中带双引号或单引号的正确引号或带反斜杠的转义。引号由第二个xargs
删除,并且rm
传递不带引号的字符串。来自man xargs:
.... xargs reads items from the standard input, delimited by blanks (which can be protected with double or single quotes or a backslash)
比较:
$ echo "\e\r\t\q\e" | xargs -t echo
echo ertqe
ertqe