To jest domyślne zachowanie 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
Jak mogę ls
wydrukować tylko basename? Lubić:
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
Uwaga : Wolę globowanie powłoki zamiast używania find
jako / net / nas / data / languages / pypm / sites / rex / free zawiera ogromną liczbę plików i katalogów.
linux
command-line
unix
ls
Srid mówi Przywróć Monikę
źródło
źródło
-maxdepth 1
dofind
.Odpowiedzi:
Chociaż
xargs -0
ma być używany do wprowadzania danych ograniczonych przez \ 0 (jakfind -print0
),ls
nie ma takiej opcji, aby ograniczyć wyniki w ten sposób.Jednak,
zrobiłby sztuczkę, aby po drodze zamienić znaki nowej linii na wartości zerowe. Dzięki temu xargs może pracować z nazwami ze spacjami.
EDYCJA: dodano
-n 1
do xargsźródło
basename: extra operand
\ 033 [0m / net / nas / data / languages / pypm / sites / rex / free / 2.6 / macosx / pool / v / vi / virtualenv-1.4.4_macosx_2.6_1.pypm \ 033 [ 0m ''-n 1
zasugerowanej gdzie indziej opcjixargs
? (odpowiedź zredagowana)-d
opcję (separator), możesz to zrobićls ... | xargs -d '\n' -n 1 basename
.Używam tego:
Daje listę taką jak:
źródło
ls -1
(i wyłączone kolorowanie), cols
sugeruje, że gdy nie zapisują do terminala. Wygląda na to, że trochę brakuje ci sensu, ponieważ problemem jest usunięcie nazwy katalogu przy określaniuls
argumentów ścieżki za pomocą symboli wieloznacznych. Spróbujls -d "$PWD/"* | tr '\n' '\n'
zobaczyć, jaki jest rzeczywisty problem.ls -1
Jak zauważył Daniel Beck, nie tylko robi to samo , ale także nie działa, gdy używane są globusy.ls -1
i działa tylko w bieżącym katalogu, a nie ze ścieżką podobną dols path/*
.źródło
awk
rozwiązanie:źródło
ls [ścieżka opcjonalna] | xargs -0 basename
źródło
xargs -0
szuka.Zarówno basename GNU, jak i basename FreeBSD akceptują
-a
argument pozwalający na przekazanie wielu ścieżek do polecenia. Działa to doskonale z globowaniem powłoki.źródło
Powiedziałeś, że wolisz globowanie niż
find
, ale czy wiesz, że te dwa nie wykluczają się wzajemnie? Globowanie ma miejsce przy każdym uruchomieniu polecenia, nie tylkols
. Na przykład:Zauważ, że w przykładzie find można użyć opcji -print0, która jest przydatna, jeśli ścieżki zawierają spacje (
tr
wspomniane gdzie indziej rozwiązania oparte na bazach świetnie sprawdzają się na zwykłych przestrzeniach, ale nie na plikach zawierających rzeczywiste znaki nowej linii).Na koniec, jeśli masz dostęp do GNU find, możesz także użyć -printf, co całkowicie eliminuje wywołanie basename:
źródło
-printf
opcja nie jest dostępna w wersji MacOSXfind
.przejdź do katalogu, w którym masz wszystkie swoje pliki i wpisz.
źródło
find
.find . -name '*pypm'
jeśli w ogóle ... po prostu umieszczenie globu obok znalezienia niczego nie osiąga - wtedy możesz po prostu napisaćls *.pypm
.)