Faça ls imprimir tudo em uma linha (como no terminal)

Faça ls imprimir tudo em uma linha (como no terminal)

lsimprime de forma diferente dependendo se a saída é para um terminal ou para outra coisa.

por exemplo:

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

Existe alguma maneira de lsimprimir em uma linha como se fosse para um terminal quando não é. Há um -Cargumento que faz isso, mas vai dividi-lo em várias linhas.

$ 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

A razão pela qual quero fazer isso é monitorar os arquivos em um diretório que estava mudando rapidamente. Eu construí esta linha de comando simples:

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

O uniq evita que ele envie spam para meu terminal e mostre apenas alterações. Porém, ele estava imprimindo tudo em linhas diferentes, o que tornava o uniq inútil e aumentava a quantidade de ruído. Em teoria, alguém poderia usar watchpara isso, mas eu queria ver um arquivo assim que ele aparecesse/desaparecesse.

Esta é a solução final:

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

Responder1

não conheço uma opção que possa fazer isso, mas você pode canalizar sua saída trpara fazer isso:

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

Responder2

ls | xargs

Funciona para mim, é a maneira mais simples que encontrei. Espero que isso ajude você também.

Responder3

Se você lstiver essa opção, você pode usar um valor alto e pode fazer o que quiser:

ls -w 10000 -C . | head

Responder4

ah, agora que você atualizou a pergunta....

while true ; do echo * ; done | uniq

fará o que você postou, apenas mais simples.

no entanto, é melhor usar algo que use inotify para fazer isso .. como

inotifywait -m . -e create,delete

se você não possui o inotify, algo assim também funciona bem:

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)

informação relacionada