使ls全部打印在一行上(如terminal)

根据输出到terminal还是别的不同, ls打印方式也不同。

例如:

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

有没有办法让ls在一行上打印出来,就好像是在terminal上打印出来一样。 有一个-C参数,这样做,但它会分成几行。

 $ 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 

我想这样做的原因是我想监视一个目录中的文件正在迅速改变。 我已经构build了这个简单的命令行:

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

uniq防止垃圾邮件发送我的terminal,只显示更改。 然而,它是在不同的线路上打印出来的,这使得uniq无用,而且增加了噪音。 理论上可以使用watch ,但是我想在文件出现/消失时立即看到文件。

这是最终的解决scheme:

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

我不知道可以这样做的开关,但是你可以通过tr来输出你的输出:

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

它适用于我,这是我find的最简单的方法。 希望这可以帮助你。

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

 ls -w 10000 -C . | head 

啊,现在你已经更新了这个问题….

 while true ; do echo * ; done | uniq 

会做什么你张贴,只是更简单。

然而,你最好使用一些使用inotify来做到这一点

 inotifywait -m . -e create,delete 

如果你没有理解,那么类似这样的工作也是如此:

 import os import time last = set() while True: cur = set(os.listdir('.')) added = cur-last removed = last-cur if added: print 'added', added if removed: print 'removed', removed last = set(os.listdir('.')) time.sleep(0.1) 

那么相当微不足道呢

 echo * 

? :-)你甚至不需要为此而分叉。 🙂

这可能是你在找什么,但我可能误解了你的问题,但在这里:)

一些值得研究的命令:

观看 – 定期执行一个程序,显示输出全屏xargs – 从标准input(如果你想处理空间等文件处理)build立和执行命令行 –

您可以执行以下操作来显示最近10个以2秒为间隔进行更改的文件/目录(默认值为手表)

看“ls -lart |尾巴-10”

选项-lart告诉ls是冗长的,并根据修改时间进行sorting。

如果你真的只是想要的文件,我会只是做一些事情:

看“ls -lart | awk'{print \ $ 8}'| tail -10 | xargs”

或者只是为了显示它们:

ls -lart | awk'{print $ 8}'| 尾-10 | xargs的

你可以在shell中使用back ticks来达到这个目的:

 echo -E `ls -1`