我有一個完整的名稱中有空格的目錄/文件夾,我想所有的*.ttf
文件複製到另一個目錄除了文件夾Consolas
和System Volume Information
。繼this後,我想:嘗試到grep一個發現-print0引起奇怪的行爲
find ... -print0 | grep -v "System Volume Information" --null | grep -v "Consolas" --null | xargs -0 cp -t destination
出於某種原因,這導致從第一grep的一個Binary file (standard input) matches
消息。使用的egrep的過濾器結合起來,我試圖:
find . -name '*.ttf' -print0 | egrep -v "(System Volume Information)|(Consolas)" --null | xargs...
但在這種情況下,egrep的將打印出沒有到終端,即使有很多其他的文件夾,除了System Volume Information
和Consolas
。當我刪除除了find
部分命令之外的所有內容時,由於-print0
選項,我得到了一大段沒有換行符的文本。由於整個區塊包括Consolas
,通過省略它我省略了的一切。我確認了這一點,當我嘗試對結果做一個grep Arial
並且打印出了整個塊。
我應該如何防止這種行爲在grep?
你正在告訴'find'輸出一個空終止列表,你不告訴'grep'讀一個空終止列表,你需要一個額外的'--null-data'來處理'greps' – BroSlow
@ BroSlow經過數小時的搜索後,非常感謝'--null-data',並且不會誤解'-Z'和'-z'! –