Linux

讓 ls 在一行上全部列印出來(就像在終端中一樣)

  • March 11, 2022

ls根據輸出是到終端還是到其他東西,列印會有所不同。

例如:

$ ls .
file1  file2
$ ls . | head
file1
file2

有沒有辦法ls在一行上列印出來,就像它不是到終端一樣。有一種-C說法是 sorta 會這樣做,但它會將其分成幾行。

$ ls
file1  file10  file11  file12  file13  file14  file15  file16  file17  file18  file19 file2  file3  file4  file5  file6  file7  file8  file9
$ ls -C . | head
file1 file11 file13 file15 file17 file19 file3  file5  file7  file9
file10 file12 file14 file16 file18 file2 file4  file6  file8

我想這樣做的原因是我想監視目錄中快速變化的文件。我建構了這個簡單的命令行:

while [[ true ]] ; do ls ; done | uniq

uniq 可以防止它向我的終端發送垃圾郵件並且只顯示更改。然而,它把它全部列印在不同的線上,這使得 uniq 無用,並增加了噪音量。理論上可以使用watch它,但我想在文件出現/消失時立即查看它。

這是最終的解決方案:

while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq

我不知道可以做到這一點的開關,但你可以通過管道輸出tr來做到這一點:

ls | tr "\n" " " | <whatever you like>
ls | xargs

它對我有用,這是我發現的最簡單的方法。希望這對您也有幫助。

引用自:https://serverfault.com/questions/105838