2011-05-31 102 views
0

Egrep正在爲我生成一個基於它們的內容的文件列表,但我做錯了嘗試將該列表傳遞給cp的參數。 (我的shell是bash)。我想我會逃過文件名中的空格並將換行符轉換爲空格,但是cp似乎忽略了管道輸入中的轉義空格。如何發送cp的文件名列表(帶空格)

示例文件名: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

當我執行反引號中的內容,我得到的輸出,我可以粘貼到CP。

我使用過xargs的嘗試:

$ egrep -l "OS\ version: 10.6" * | sed -e 's/ /\ /g' | tr '\n' ' ' | xargs cp ~/crashreportstemp

但是,這會導致CP對待最後通過文件名的最後CP的說法,無視我明確的參數CP:

cp: target `2011-05-30 16.23.30.txt' is not a directory

我明顯地忽略了正確的做法,請幫忙!

由於賈森 -

回答

0

嘗試是這樣的:

egrep -l "OS\ version: 10.6" * | sed -e 's/ /\ /g' | tr '\n' ' ' && echo ~/crashreportstemp | xargs cp 

在你的版本,〜/ crashreportstemp是越來越作爲第一個參數CP,而不是最後通過。

+0

謝謝!好點子。這幾乎是工作,但CP似乎無法辨別出最後一個參數是目的地。 「cp:'〜/ crashreportstemp'之後缺少目標文件操作數'」如果我將命令的輸出複製到xargs管道之前並將其粘貼到cp命令之前,則它工作正常。也許我需要使用輸入重定向? – rockriver 2011-05-31 18:26:00