Mam katalog o nazwie uploads
. Zawiera kilka plików oraz kilka podkatalogów, które z kolei zawierają pliki.
Czy istnieje sposób (w jednym kroku) na wykonanie następujących czynności:
Wymień TYLKO pliki w katalogu głównym przesyłania - nie chcę widzieć nazw podfolderów ani ich zawartości;
i
NIE wymieniaj żadnych plików, które zaczynają się od
t_
Wiem o -d
fladze, ale nie zapewnia mi to, czego chcę.
-exec ls -lG -- {} +
w swojej odpowiedzi, aby uzyskać wynik przy użyciu dodatkowych opcji dla ls. Możesz także dodać tylko-ls
do tego znaleziska, aby uzyskać szybkie i brudne przybliżenie szczegółowego widoku ls.GNU ls (tj. Polecenie ls w niewbudowanych systemach Linux i Cygwin, dostępne również w niektórych innych systemach unikatowych) ma opcję ukrywania niektórych plików na podstawie ich nazw. Nie można jednak zignorować katalogów.
Innym podejściem jest sprawienie, aby powłoka dopasowała się. Bash, ksh i zsh mają wzorzec negacji
!(t_*)
pasujący do wszystkich plików oprócz pasującycht*
; w bash ta funkcja musi być włączona za pomocąshopt -s extglob
, aw zsh musi być włączona za pomocąsetopt ksh_glob
. Zsh ma również równoważną składnię,^t_*
którą należy włączyćsetopt extended_glob
. To nadal nie ignoruje katalogów. Zsh ma dodatkową funkcję, która pozwala dopasowywać pliki nie tylko według nazwy, ale także według metadanych i innych: kwalifikatorów glob . Dodaj(.)
na końcu dopasowania, aby ograniczyć się do zwykłych plików. Negacja^
jest częścią składni dopasowania nazwy, więc^t_*(.)
oznacza „wszystkie zwykłe pliki nie pasująt_*
”, a nie „wszystkie pliki, które nie są zwykłymi plikami pasującet_*
”.Jeśli znajdziesz się bez zaawansowanych narzędzi, możesz to zrobić na dowolnym Uniksie
find
. To nie jest coś, co zwykle wpisujesz w wierszu poleceń, ale jest mocne i precyzyjne. Caleb już pokazał, jak to zrobić za pomocą GNU find . Ta-maxdepth
opcja nie jest przenośna;-prune
zamiast tego możesz użyć , aby przenośnie przestać sięfind
powtarzać.Zamień
-print
na,-exec ls -lG -- {} +
aby wykonaćls
z ulubionymi opcjami plików.Wszystkie powyższe polecenia ukrywają pliki kropkowe (tzn. Pliki, których nazwa zaczyna się na a
.
). Jeśli chcesz je wyświetlić, należy przekazać-A
dols
lub dodaćD
kwalifikator glob w zsh (ls uploads/^t_*(.D)
). Za pomocąfind
można zastosować inne podejście, aby rekursja była powtarzana tylko o jeden poziom (find
nie traktuje specjalnie plików kropek). Działa tofind
w pełni tylko wtedy, gdy uruchomisz w bieżącym katalogu.źródło
-maxdepth
powinien działać, ale problem „przenośności”, o którym wspomina Gilles, polega na tym, że BSDfind
(myślę, że także w OSX) jest nieco innym zwierzęciem, więc możesz potrzebować jego odpowiedzi. @Gilles: +1 za sztuczkę zsh!prune
s, ale odpuszczę, mówiąc po prostu, że kiedy chowam się na własnych systemach, tyle razy myśl „ czy to polecenie zadziała, gdybym był włączony AIX, Solaris lub MINIX3 ”jest w przybliżeniu ... w trybie gotowości ... Mam trudności z odczytaniem licznika ... wyświetlacz jest zamrożony0.00
.ls
ma--use-telepathy
opcji? To najszybszy sposób, aby wyświetlić tylko te pliki, które chcesz. Może jednak nie być przenośny.źródło
$9
w tym stwierdzeniu?ls
dane wyjściowe .print
$ NF` byłby lepszy, IMO. $ NF oznacza liczbę pól, która wynosiłaby 9 i jest powszechnym zastosowaniem w AWK jako dobra okazja do nauczenia innych o $ NF.źródło
find
?Pozwól, że spróbuję za pomocą
ls
i rur:powiedzmy, że ostatnia kolumna jest dziewiąta.
źródło
Jeśli problem z przenośnością find -maxdepth stanowi problem, możesz użyć:
Nie jestem ekspertem, ale myślę, że to powinno zadziałać. Przypuszczam, że wygląda to trochę tajemniczo, ale jeśli mówisz awk, to tak naprawdę nie jest. Zamiast 9 USD można użyć $ NF. Możesz także:
co robi to samo (ale być może mniej wydajnie niż poprzednie ???).
Właściwie, po przemyśleniu innych postów, wygląda na to
jest jeszcze krótszym i bardziej przejrzystym sposobem.
Niech ktoś mnie poprawi, jeśli się mylę. :-)
źródło
ls
jest na ogół dobrym pomysłem . Twoje sztuczki z awk zakończą się niepowodzeniem, na przykład z nazwami plików z białymi spacjami.Znalazłem te krótkie sposoby:
lub
źródło
Wypróbuj ten alias i użyj go:
źródło
ls -hLlF
pokazuje podkatalogi i pokazuje pliki zaczynające się odt_
. Jak to odpowiada na pytanie?Bułka z masłem:
ls -l --hide 't_*' <absolute path to desired directory> | grep -v ^d
źródło