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)
Chr*_*ian 22
我不知道有什么开关可以做到这一点,但您可以通过管道输出tr来做到这一点:
ls | tr "\n" " " | <whatever you like>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45705 次 |
| 最近记录: |