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
Antworten:
Ich kenne keinen Schalter, der das könnte, aber Sie können Ihre Ausgabe durchleiten
tr
, um es zu tun:quelle
Es funktioniert für mich, es ist der einfachste Weg, den ich je gefunden habe. Hoffe das hilft dir auch.
quelle
Wenn Sie
ls
diese Option haben, können Sie einen hohen Wert verwenden und es kann tun, was Sie wollen:quelle
Ah, jetzt, wo Sie die Frage aktualisiert haben ...
wird tun, was Sie gepostet haben, nur einfacher.
Es ist jedoch besser, wenn Sie etwas verwenden, das inotify verwendet, um dies zu tun
Wenn Sie nicht inotify haben, funktioniert so etwas auch gut:
quelle
Was ist mit dem ziemlich Trivialen
? :-) Du musst nicht einmal dafür gabeln. :-)
quelle
Dies ist vielleicht das, wonach Sie suchen, aber ich habe Ihre Frage möglicherweise falsch verstanden, aber hier ist es :)
Einige Befehle, die es wert sind, untersucht zu werden:
watch - Führen Sie ein Programm regelmäßig aus und zeigen Sie die Vollbild-Xargs an. Erstellen Sie Befehlszeilen aus der Standardeingabe und führen Sie sie aus (-0, wenn Sie Dateien mit Leerzeichen usw. verarbeiten möchten.)
Sie können Folgendes tun, um die letzten 10 Dateien / Verzeichnisse anzuzeigen, die sich im Abstand von 2 Sekunden geändert haben (Standard für die Überwachung).
Die Optionen -lart weisen ls an, ausführlich zu sein und nach Änderungszeit zu sortieren.
Wenn Sie wirklich nur die Dateien wollen, würde ich einfach so etwas tun:
oder nur um sie anzuzeigen:
quelle
Sie können Back Ticks in der Shell verwenden, um dies zu erreichen:
quelle
touch ./-en
[a-d]
dieser Art beginnen . Wenn Sie es in einem Skriptecho -E
ausführen, wäre dies nicht zu unpraktisch und die nachfolgende neue Zeile spielt möglicherweise keine Rolle.Dies funktionierte für mich, weil ich nicht nur das Ergebnis in einer Zeile drucken musste, sondern auch angeben musste, wie es getrennt werden musste, und Sie können dies mit ORS angeben
quelle