Ich versuche, jede .tar.gz
Datei mit dem folgenden Befehl aufzulisten:
ls *.tar.gz -l
... Es zeigt mir folgende Liste:
-rw-rw-r-- 1 osm osm 949 Nov 27 16:17 file1.tar.gz
-rw-rw-r-- 1 osm osm 949 Nov 27 16:17 file2.tar.gz
Ich muss es jedoch nur so auflisten:
file1.tar.gz
file2.tar.gz
und auch nicht:
file1.tar.gz file2.tar.gz
Wie wird das "richtig" gemacht?
ls -1 *.tar.gz
, Aber was wollen Sie die Liste verwenden , für ? Wenn Sie diesen Dateinamen etwasls
antun , ist dies nicht der richtige Weg. Siehe Warum * nicht * `ls` analysieren (und was stattdessen tun)?man ls
. Stellen Sie sicher, dass Ihre Anzeigeschrift einen guten Kontrast zwischen 1 (eins) und l (Kleinbuchstabe ell) aufweist.Antworten:
Die
-1
Option (die Ziffer "Eins", nicht Kleinbuchstaben "L") listet eine Datei pro Zeile ohne weitere Informationen auf:quelle
ls -1 *.tar.gz
funktioniert genauso gut.-
..hiddenfile
,benign.php
,evil.bin
,--hide=*evil*
; ohne das--
wirst du nicht sehenevil.bin
oder--hide=*evil*
.-2
(oder -3 usw.)! ;-)columns
!)Wenn Sie nur die Dateinamen benötigen, können Sie Folgendes verwenden
printf
:... erweitert die Shell den
*.tar.gz
Platzhalter auf die Dateinamen undprintf
druckt sie dann aus, gefolgt von einer neuen Zeile. Diese Ausgabe würde sich geringfügig vonls
der bei Dateinamen mit eingebetteten Zeilenumbrüchen unterscheiden:installieren
ls
printf
quelle
ls -b
,ls -Q
, ls--quoting-style=...
.printf '%q\n'
. (Beide GNU.)ls
verhält sich anders, wenn sein Ausgang geleitet wird. Zum Beispiel:Wenn Sie also alle Ihre
*.tar.gz
Dateien sehen möchten , eine pro Zeile, können Sie dies tun:Aber was ist, wenn Sie Ihre Ausgabe nicht weiterleiten möchten? Gibt es eine Möglichkeit,
ls
die Ausgabe der Dateinamen in eine Zeile zu erzwingen , ohne die Ausgabe weiterzuleiten?Ja, mit dem
-1
Schalter. (Das ist ein Bindestrich mit der Nummer 1.) Sie können also folgende Befehle verwenden:quelle
Oder mit
GNU find
:Im Gegensatz zu dem
ls
mit*
ihm wird für die Suche.tar.gz
Dateien rekursiv:quelle
-printf '%P\n'
und nicht nur-print
- ab diesem Zeitpunktfind
funktioniert jeder Posix-kompatible Computer .-print
wird./
vor dem Dateinamen hinzugefügt .Ein etwas runder und kurvenreicher Weg:
BEARBEITEN: Anführungszeichen hinzugefügt, um seltsame Dateinamen zu verarbeiten
quelle
touch -- '-e \a.tar.gz'
aus einem Grund, Ihre Variablen und unix.stackexchange.com/q/65803/117549 zu zitieren, aus Gründen, printf anstelle von echo zu verwenden-e \a.tar.gz
Datei entferntrm -- '-e \a.tar.gz'
sollte den Trick machen--
das fürrm
und viele andere funktioniert .rm_etc './-x blah'