如何向 cp 发送文件名列表(带空格)
Egrep 正在根据文件内容为我生成文件列表,但我在尝试将该列表作为参数传递给 cp 时做错了一些事情。 (我的外壳是 bash)。我以为我会转义文件名中的空格并将换行符转换为空格,但 cp 似乎忽略了管道输入中转义的空格。
文件名示例:2011-05-15\ 14.43.41.txt
$ cp `egrep -l "OS\ version: 10.6" * | sed -e 's/ /\ /g' | sed -e 's/ /\ /g' | tr '\n' ' '` ~/crashreportstemp/
cp: 无法统计 `2011-05-15': 没有这样的文件或目录
当我执行反引号的内容时,我得到的输出可以直接粘贴到 cp 中。
我也尝试过使用 xargs:
$ egrep -l "OS\ version: 10.6" * | sed -e 's/ /\ /g' | sed -e 's/ /\ /g' | tr '\n' ' ' | xargs cp ~/crashreportstemp
但这会导致 cp 将最后传递的文件名视为最终的 cp 参数,忽略我对 cp 的显式参数:
cp: target `2011-05-30 16.23.30.txt ' 不是目录
我显然忽略了执行此操作的正确方法,请帮忙!
谢谢 - 杰森
Egrep is generating for me a list of files based on their contents, but I'm doing something wrong trying to pass that list to cp as arguments. (My shell is bash). I thought I'd escape the spaces in the filenames and convert the newlines to spaces, but cp appears to ignore the escaped spaces in the piped input.
Example filename: 2011-05-15\ 14.43.41.txt
$ cp `egrep -l "OS\ version: 10.6" * | sed -e 's/ /\ /g' | tr '\n' ' '` ~/crashreportstemp/
cp: cannot stat `2011-05-15': No such file or directory
When I execute the contents of the backticks, I'm getting output that I could paste right into cp.
I've tried using xargs too:
$ egrep -l "OS\ version: 10.6" * | sed -e 's/ /\ /g' | tr '\n' ' ' | xargs cp ~/crashreportstemp
But that causes cp to treat the last passed file name as the final cp argument, ignoring my explicit argument to cp:
cp: target `2011-05-30 16.23.30.txt' is not a directory
I'm obviously overlooking the right way to do this, please help!
Thanks - Jason
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试这样的操作:
在您的版本中, ~/crashreportstemp 作为第一个参数传递给 cp,而不是最后一个。
Try something like this:
In your version, ~/crashreportstemp is getting passed as the first argument to cp, not the last.