ls
imprime de maneira 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 ls
imprimir em uma linha como se fosse um terminal quando não estiver. Há um -C
argumento que meio que faz isso, mas o dividirá 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
O motivo pelo qual desejo fazer isso é que desejo monitorar os arquivos em um diretório que estavam mudando rapidamente. Eu construí esta linha de comando simples:
while [[ true ]] ; do ls ; done | uniq
O uniq impede que ele envie spam para o meu terminal e apenas mostre alterações. No entanto, 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 watch
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
Respostas:
Eu não sei de um switch que poderia fazer isso, mas você pode canalizar sua saída
tr
para fazer isso:fonte
Funciona para mim, é a maneira mais simples que eu já encontrei. Espero que isso ajude você também.
fonte
Se você
ls
tiver essa opção, poderá usar um valor alto e ele poderá fazer o que quiser:fonte
ah, agora que você atualizou a pergunta ....
fará o que você postou, apenas mais simples.
no entanto, é melhor usar algo que usa inotify para fazer isso.
se você não tiver inotify, algo assim também funcionará bem:
fonte
E o bastante trivial
? :-) Você nem precisa se esforçar para isso. :-)
fonte
Pode ser o que você está procurando, mas eu posso ter entendido sua pergunta, mas aqui vai :)
Alguns comandos que vale a pena examinar:
watch - executa um programa periodicamente, mostrando xargs em tela cheia - constrói e executa linhas de comando a partir da entrada padrão (-0 se você deseja manipular arquivos com espaços, etc.)
Você pode fazer algo como o seguinte para mostrar os últimos 10 arquivos / diretórios que foram alterados com um intervalo de 2 segundos (padrão para observação)
as opções -lart dizem ao ls para ser detalhado e classificar com base no tempo de modificação.
Se você realmente quer apenas os arquivos, eu faria algo como:
ou apenas para exibi-los:
fonte
Você pode usar ticks de volta no shell para conseguir isso como:
fonte
touch ./-en
[a-d]
esse tipo antes. Se você o estiver executando em um scriptecho -E
, não seria muito inconveniente e a nova linha à direita pode não importar.