bash - 无法使用 xagrs 直接将带引号的字符串传递给 rm
问题描述
为了找到一些文件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
ing 而不是直接传递 -
ls | grep 2019 | xargs -i echo \"{}\" | xargs rm
这行得通。
为什么没有echo
ing 就不行?
解决方案
正确引用由 完成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
另请参阅为什么不应该解析 ls(1) 的输出。
推荐阅读
- json - 并排 JSON diff 与 npm jsoneditor 包
- frameworks - 大型社交网络的最佳语言/框架
- python - 深度学习课程:加载数据集时出错
- python - 试图找到一个事件的总数
- javascript - 在自定义 React 钩子中编写类型注释
- java - 关于局部变量的内联匿名类如何在后台工作?
- delphi - 如何为分配有`VK_NUMPAD0`的菜单项快捷方式显示“NUMERIC KEYPAD”?
- java - Cassandra 中的单数据列与多列
- php - Symfony 文件系统 chmod() 设置了不正确的权限
- r - R:在数据框/矩阵的某些列中采样 n 个元素并替换它们的值