ls
stampa in modo diverso a seconda che l'output sia verso un terminale o qualcos'altro.
per esempio:
$ ls .
file1 file2
$ ls . | head
file1
file2
C'è un modo per fare la ls
stampa su una riga come se fosse su un terminale quando non lo è. C'è un -C
argomento che fa questo, ma lo dividerà in più righe.
$ 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
Il motivo per cui voglio fare questo è che voglio monitorare i file in una directory che stavano cambiando rapidamente. Avevo costruito questa semplice riga di comando:
while [[ true ]] ; do ls ; done | uniq
Uniq gli impedisce di inviare spam al mio terminale e di mostrare solo le modifiche. Tuttavia, stava stampando tutto su linee differnet, il che rendeva inutile l'universo e aumentava la quantità di rumore. In teoria si potrebbe usare watch
per questo, ma volevo vedere un file non appena appariva / scompariva.
Questa è la soluzione finale:
while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq