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