ls
Druckt unterschiedlich, je nachdem, ob die Ausgabe an ein Terminal oder an etwas anderes erfolgt.
z.B:
$ ls .
file1 file2
$ ls . | head
file1
file2
Gibt es eine Möglichkeit ls
, in einer Zeile auszudrucken, als ob es sich um ein Terminal handelt, wenn dies nicht der Fall ist ? Es gibt ein -C
Argument, dass sorta das tut, aber es wird es in mehrere Zeilen aufteilen.
$ 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
Der Grund, warum ich dies tun möchte, ist, dass ich die Dateien in einem Verzeichnis überwachen möchte, die sich schnell geändert haben. Ich hatte diese einfache Kommandozeile erstellt:
while [[ true ]] ; do ls ; done | uniq
Das Uniq verhindert, dass es mein Terminal spammt und nur Änderungen anzeigt. Es wurde jedoch alles auf verschiedenen Linien gedruckt, was die Uniq unbrauchbar machte und das Rauschen erhöhte. Theoretisch könnte man das verwenden watch
, aber ich wollte eine Datei sehen, sobald sie erschien / verschwand.
Dies ist die endgültige Lösung:
while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq