569 Stimmen

Wie lassen sich mehrere Zeilen mit Dateinamen zu einer Zeile mit benutzerdefiniertem Trennzeichen zusammenfügen?

Ich möchte mich dem Ergebnis von ls -1 in eine Zeile einfügen und sie mit einem beliebigen Zeichen abgrenzen.

Gibt es irgendwelche Standard-Linux-Befehle, mit denen ich dies erreichen kann?

905voto

Artem Punkte 8106

Ähnlich wie die allererste Option, aber ohne das nachgestellte Trennzeichen

ls -1 | paste -sd "," -

426voto

zaf Punkte 22282

EDIT : Einfach " ls -m " Wenn das Begrenzungszeichen ein Komma sein soll

Ah, die Macht und Einfachheit!

ls -1 | tr '\n' ','

Ändern Sie das Komma " , " auf was immer Sie wollen. Beachten Sie, dass dies ein "hinteres Komma" einschließt (für Listen, die mit einem Zeilenumbruch enden)

40voto

Dennis Williamson Punkte 322329

Dadurch wird das letzte Komma durch einen Zeilenumbruch ersetzt:

ls -1 | tr '\n' ',' | sed 's/,$/\n/'

ls -m enthält Zeilenumbrüche an der Stelle, an der der Bildschirm am breitesten ist (z. B. 80.).

Meistens Bash (nur ls ist extern):

saveIFS=$IFS; IFS=$'\n'
files=($(ls -1))
IFS=,
list=${files[*]}
IFS=$saveIFS

Verwendung von readarray (alias mapfile ) in Bash 4:

readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS

Vielen Dank an gniourf_gniourf für die Vorschläge.

35voto

majkinetor Punkte 8294

Ich denke, das hier ist großartig

ls -1 | awk 'ORS=","'

ORS ist das "output record separator", d.h. Ihre Zeilen werden durch ein Komma getrennt.

19voto

kenorb Punkte 134883

Parsing ls im Allgemeinen wird nicht empfohlen Die bessere Alternative ist also die Verwendung von find zum Beispiel:

find . -type f -print0 | tr '\0' ','

Oder durch die Verwendung von find et paste :

find . -type f | paste -d, -s

Für allgemeines Verbinden mehrerer Zeilen (nicht auf das Dateisystem bezogen), prüfen Sie: Kurzes und portables "join" auf der Unix-Kommandozeile .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X