使 ls 全部打印在一行上(就像在终端中一样)

Ama*_*rus 20 linux unix shell bash command-line-interface

ls 根据输出是到终端还是到其他地方,打印方式不同。

例如:

$ ls .
file1  file2
$ ls . | head
file1
file2
Run Code Online (Sandbox Code Playgroud)

有没有办法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
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是我想监视目录中快速变化的文件。我构建了这个简单的命令行:

while [[ true ]] ; do ls ; done | uniq
Run Code Online (Sandbox Code Playgroud)

uniq 防止它向我的终端发送垃圾邮件并且只显示更改。然而,它全部打印在不同的线上,这使得 uniq 无用,并增加了噪音量。理论上可以watch用于此目的,但我想在文件出现/消失后立即查看。

这是最终的解决方案:

while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq
Run Code Online (Sandbox Code Playgroud)

小智 24

ls | xargs
Run Code Online (Sandbox Code Playgroud)

它对我有用,这是我找到的最简单的方法。希望这对你也有帮助。


Chr*_*ian 22

我不知道有什么开关可以做到这一点,但您可以通过管道输出tr来做到这一点:

ls | tr "\n" " " | <whatever you like>
Run Code Online (Sandbox Code Playgroud)


Den*_*son 5

如果你ls有这个选项,你可以使用一个高值,它可能会做你想要的:

ls -w 10000 -C . | head
Run Code Online (Sandbox Code Playgroud)


pet*_*erh 5

那些非常琐碎的事呢

echo *
Run Code Online (Sandbox Code Playgroud)

?:-) 你甚至不需要为它分叉。:-)