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


15

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

4
如果将ls传递给另一个命令,则说明您做错了什么。您实际上想完成什么?
贾斯汀2010年

贾斯汀,我用解释更新了问题。
罗里

Answers:


15

我不知道可以做到这一点的开关,但您可以通过管道将其输出tr来完成:

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

18
ls | xargs

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



4

啊,既然您已经更新了问题...。

while true ; do echo * ; done | uniq

将执行您发布的内容,只是更简单。

但是,最好使用使用inotify的东西来做到这一点。

inotifywait -m . -e create,delete

如果您没有inotify,那么类似这样的方法也很好:

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)


0

这可能是您要查找的内容,但我可能误解了您的问题,但是这里有:)

一些值得研究的命令:

监视-定期执行程序,显示输出全屏xargs-从标准输入生成并执行命令行(如果要处理带空格的文件,则为-0)

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

观看“ ls -lart |尾巴-10”

选项-lart告诉ls冗长并根据修改时间排序。

如果您真的只想要这些文件,那么我将执行以下操作:

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

或只是为了显示它们:

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


0

您可以在外壳程序中使用反勾来实现以下目的:

echo -E `ls -1`

不适用于所有文件名。试试:touch ./-en
kasperd

这仅在您之前没有以[a-d]该类型开头的文件时才重要。如果您在脚本中运行它,echo -E不会太麻烦,并且尾随换行符可能无关紧要。
小鸡

0

这对我有用,因为我不仅需要将结果打印在一行中,而且还需要指定如何分隔结果,并且可以使用ORS来指定

ls -1 | awk '{ ORS="|"; print; }'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.