Dies ist das Standardverhalten von ls
ls /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86/pool/v/vi/virtualenv-1.4.4_linux-x86_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86_64/pool/v/vi/virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/macosx/pool/v/vi/virtualenv-1.4.4_macosx_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/win32-x86/pool/v/vi/virtualenv-1.4.4_win32-x86_2.6_1.pypm
Wie kann ich ls
nur den Basisnamen drucken lassen? Mögen:
ls $OPTIONS /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
virtualenv-1.4.4_linux-x86_2.6_1.pypm
virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
virtualenv-1.4.4_macosx_2.6_1.pypm
virtualenv-1.4.4_win32-x86_2.6_1.pypm
Hinweis : Ich bevorzuge die Verwendung von Shell-Globbingfind
von / net / nas / data / languages / pypm / sites / rex / free, das eine große Anzahl von Dateien und Verzeichnissen enthält.
linux
command-line
unix
ls
Srid sagt Reinstate Monica
quelle
quelle
-maxdepth 1
an nicht bewusst istfind
.Antworten:
While
xargs -0
soll für Eingaben verwendet werden, die durch \ 0 (likefind -print0
) begrenzt sind.ls
gibt es keine solche Option, um die Ausgabe auf diese Weise zu begrenzen.Jedoch,
würde den Trick tun, um Newlines auf dem Weg in Nullen umzuwandeln. Auf diese Weise können xargs mit Namen arbeiten, die Leerzeichen enthalten.
BEARBEITEN:
-n 1
zu xargs hinzugefügtquelle
basename: extra operand
\ 033 [0m / net / nas / data / languages / pypm / sites / rex / kostenlos / 2.6 / macosx / pool / v / vi / virtualenv-1.4.4_macosx_2.6_1.pypm \ 033 [ 0m'`-n 1
woanders als option vorgeschlagenxargs
? (Antwort bearbeitet)-d
Option (Trennzeichen) unterstützt, können Sie dies tunls ... | xargs -d '\n' -n 1 basename
.Ich benutze das:
Es gibt eine Liste wie:
quelle
ls -1
(und das Färben ist deaktiviert), wie diesls
impliziert, wenn nicht in ein Terminal geschrieben wird. Es sieht so aus, als ob Sie den Punkt ein wenig verfehlen, da das Problem darin besteht, den Verzeichnisnamen zu entfernen, wenn Pfadargumente mit Platzhaltern angegebenls
werden. Versuchen Siels -d "$PWD/"* | tr '\n' '\n'
zu sehen, was das eigentliche Problem ist.ls -1
, es funktioniert auch nicht, wenn Globs verwendet wurden, wie Daniel Beck betonte.ls -1
und funktioniert nur im aktuellen Verzeichnis, nicht mit einem Pfad wiels path/*
.quelle
awk
Lösung:quelle
ls [optionaler Pfad] | xargs -0 Basisname
quelle
xargs -0
gesucht wird.Sowohl der GNU-Basisname als auch der FreeBSD-Basisname akzeptieren ein
-a
Argument, mit dem Sie mehrere Pfade an den Befehl übergeben können. Dies funktioniert hervorragend mit Shell-Globbing.quelle
Sie sagten, Sie würden lieber herumhüpfen
find
, aber wussten Sie, dass sich die beiden nicht gegenseitig ausschließen? Das Globbing erfolgt bei jedem Befehl, den Sie ausführen, nicht nurls
. Beispielsweise:Beachten Sie, dass das Beispiel find -print0 verwenden kann, was praktisch ist, wenn Ihre Pfade Leerzeichen enthalten (das
tr
anderer Stelle erwähnten -basierten Lösungen eignen sich hervorragend für normale Leerzeichen, jedoch nicht für Dateien mit tatsächlichen Zeilenumbrüchen).Wenn Sie Zugriff auf GNU find haben, können Sie auch -printf verwenden, wodurch der Aufruf des Basisnamens insgesamt vermieden wird:
quelle
-printf
Option in der MacOSX-Version von nicht verfügbarfind
.Gehen Sie in das Verzeichnis, in dem Sie alle Dateien gespeichert und eingegeben haben.
quelle
find
.find . -name '*pypm'
wenn überhaupt ... nur das Platzieren des Glob als nächstes zu findenls *.pypm