Linux

為什麼我的命令輸出中有空行?:find ~/x/y/ |shuf > ~/Desktop/z.txt

  • June 16, 2013

事實證明,這個問題的原因是一個文件名帶有幾個換行符。(不知道那是怎麼發生的。)

find ~/x/y/ | shuf > ~/Desktop/z.txt

除了“z.txt”文件中出現一些空行之外,此命令幾乎可以正常工作。這很不方便,因為下一步是選擇最上面的文件並打開它,空行顯然沒有用。我很好奇為什麼會發生這種情況,以及是否有一些“標準”解決方案(某個選項?),或者,一些強大而簡單的解決方案(刪除空行的額外命令?)。

shuf不添加空行,因此它們必須來自find. 這表明在該目錄中的某處存在名稱包含兩個連續換行符的文件。您可以使用命令查看它們是什麼

find ~/x/y/ -name '*
*' -print -exec echo '========'

或者

find ~/x/y/ -name '*
*' -exec ls -q

要使用命令處理包含換行符的文件名shuf,請使用空字節作為分隔符。

find ~/x/y/ -print0 | shuf -z

我不確定為什麼輸出文件中會出現空行,但您可以在寫入文件之前嘗試過濾掉空行。

find ~/x/y/ | shuf | grep -v '^$' > ~/Desktop/z.txt

為了追踪空白行的來源,請嘗試find自行執行。

find ~/x/y/ > ~/Desktop/z.txt

中是否出現空行z.txt?如果是這樣,它們很可能是由find.


您可以使用以零結尾的項目代替以換行符結尾的項目。當您從列表中選擇第一項時,只需使用從第一個字元到第一個空字元的文本。

find ~/x/y/ -print0 | shuf -z > ~/Desktop/z.txt

引用自:https://unix.stackexchange.com/questions/79432