Jak wyświetlić listę wszystkich plików w jednym folderze, ale bez ich folderów lub plików podrzędnych. Innymi słowy: jak mogę wyświetlić tylko pliki?
bash
file-listing
Rodrigo
źródło
źródło
Odpowiedzi:
Używając
find
:find . -maxdepth 1 -type f
Użycie tej
-maxdepth 1
opcji zapewnia, że będziesz szukać tylko w bieżącym katalogu (lub, jeśli zastąpisz.
jakąś ścieżką, tym katalogu). Jeśli chcesz uzyskać pełną rekurencyjną listę wszystkich plików w tym i podkatalogach, po prostu usuń tę opcję.źródło
find
na mac, nie ma ani-type
, ani-maxdepth
opcji.-type
i-maxdepth
nie są opcjami w normalnym sensie; BSDfind
(używane na OS X) nazywa je prawyborach , i muszą one pochodzić po nazwie pliku operandów (S) (.
w tym przypadku; uwaga, że w przeciwieństwie na Linux, BSD potrzeby wersji przynajmniej jeden wyraźny filename operand); polecenie w tej odpowiedzi zdecydowanie działa na komputerze Mac.find *.png -maxdepth 0 -type f
unikanie./
przedrostka w nazwach plików wyjściowych; zwróć także uwagę na-maxdepth
of0
, nie1
), o ile potrzebujesz tylko nazw plików w kolejności alfabetycznej . Jeśli chcesz, cols
można zrobić dla Ciebie w inny sposób (inny format wyjściowy / kolejność, bezpośrednia kontrola nad tym, czy ukryte elementy są uwzględnione, czy nie), uzupełnione o filtrowanie [wielu] typów, skrypt z mojej odpowiedzi może pomóc.find * -maxdepth 0 -type f
(alternatywa wywodząca się z komentarza @ AlexHall) zfind . -maxdepth 1 -type f
odpowiedzią:find . ...
niezmiennie zawiera ukryte elementy, niezmiennie przedrostki plików wyjściowych z./
, aw przypadku GNUfind
(Linux) zazwyczaj wyświetla nieposortowaną listę.find * ...
ze względu na zezwolenie powłoce na wykonanie globalizacji z góry, domyślnie wyklucza ukryte elementy (można to zmienićshopt -s dotglob
), wyświetla same nazwy plików (bez prefiksu), posortowane alfabetycznie. Żadne podejście nie obejmuje dowiązań symbolicznych do plików; użyj opcji,-L
aby to zrobić.ls -p pozwala pokazać / po nazwie folderu, która działa jak znacznik do usunięcia.
źródło
ls
opróczfind
, ponieważ ten ostatni zwraca ścieżki względne, a poprzednie tylko nazwy plików. Użyj odpowiedniego narzędzia do pracy.Oparta na Carlpetcie
find
odpowiedź (find . -maxdepth 1 -type f
) działa w zasadzie, ale nie jest tym samym, co użyciels
: otrzymujesz potencjalnie nieposortowaną listę nazw plików z prefiksami./
i tracisz możliwość zastosowanials
wielu opcji ;również
find
niezmiennie znajduje ukryte elementy , podczas gdyls
„zachowanie zależy od obecności lub braku opcji-a
lub-A
.Poprawa , sugerowane przez Alex Hall w komentarzu na pytanie jest łączenie powłoki masek z
find
:find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
ls
wielu innych opcji sortowania / formatu wyjściowego.Odpowiedź
ls
+grep
Hansa Roggemana jest pragmatyczna, ale ogranicza cię do używania-l
formatu wyjściowego long ( ) .Aby rozwiązać te ograniczenia, napisałem narzędzie
fls
( f iltering ls ) ,ls
a jednocześnie zapewnia możliwość filtrowania typu ,f
pliki,d
katalogi il
dowiązania symboliczne przed listąls
argumentów (uruchomfls --help
lubfls --man
dowiedz się więcej).Przykłady:
fls f # list all files in current dir. fls d -tA ~ # list dirs. in home dir., including hidden ones, most recent first fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l)
Instalacja
Obsługiwane platformy
Z rejestru npm
Uwaga: Nawet jeśli nie używasz Node.js, jego menedżer pakietów
npm
działa na różnych platformach i jest łatwy w instalacji; próbowaćcurl -L https://git.io/n-install | bash
Po zainstalowaniu Node.js zainstaluj w następujący sposób:
Uwaga :
To, czy potrzebujesz,
sudo
zależy od tego, jak zainstalowałeś Node.js / io.js i czy później zmieniłeś uprawnienia ; jeśli pojawi sięEACCES
błąd, spróbuj ponownie zsudo
.-g
Zapewnia globalną instalację i jest potrzebne, aby umieścićfls
w systemowym$PATH
.Instalacja ręczna
bash
skrypt jakofls
.chmod +x fls
.$PATH
, na przykład/usr/local/bin
(macOS) lub/usr/bin
(Linux).źródło
-1
(numer jeden);ls
w rzeczywistości domyślnie jest to „gołe” wyjście, tj. tylko nazwy plików, ale podczas wysyłania do terminala używa układu opartego na kolumnach (wiele nazw plików w linii). Aby uzyskać jedną nazwę pliku na linię wyjściową (codir /b
robi, jeśli pamięć jest obsługiwana), użyj-1
opcji, która jest w rzeczywistości włączona, gdy standardowe wyjście nie jest podłączone do terminala, na przykład podczas wysyłania do potoku lub pliku wyjściowego.Wyświetlanie zawartości jakiegoś katalogu, bez podkatalogów
Lubię korzystać z
ls
opcji, na przykład:Czasami
--color
i wszyscy inni. (Zobaczls --help
)Wymieniam wszystko oprócz folderów
Spowoduje to wyświetlenie plików, dowiązań symbolicznych, urządzeń, potoków, gniazd itp.
więc
find /some/path -maxdepth 1 ! -type d
można łatwo posortować według daty:
find /some/path -maxdepth 1 ! -type d -exec ls -hltrF {} +
Tylko lista plików :
lub
find /some/path -maxdepth 1 -type f
posortowane według rozmiaru:
find /some/path -maxdepth 1 -type f -exec ls -lSF --color {} +
Zapobiegaj wyświetlaniu ukrytych wpisów :
Aby nie pokazywać ukrytych wpisów, których nazwa zaczyna się kropką, możesz dodać
! -name '.*'
:find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
Następnie
Można zastąpić
/some/path
przez.
do listy do bieżącego katalogu lub..
do katalogu nadrzędnego .źródło
Możesz również użyć
ls
zgrep
lubegrep
i umieścić go w swoim profilu jako alias:ls -l | egrep -v '^d' ls -l | grep -v '^d'
źródło
znajdź pliki: ls -l / home | grep "^ -" | tr -s '' | wytnij -d '' -f 9
znajdź katalogi: ls -l / home | grep "^ d" | tr -s '' | wytnij -d '' -f 9
znajdź linki: ls -l / home | grep "^ l" | tr -s '' | wytnij -d '' -f 9
tr -s '' zamienia dane wyjściowe w plik rozdzielany spacjami, a polecenie cut mówi, że separatorem jest spacja, i zwraca 9. pole (zawsze nazwa pliku / nazwa katalogu / nazwa dowiązania).
Używam tego cały czas!
źródło
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }
dodane,
xargs
aby działało, i używane-1
zamiast-l
pokazywać tylko nazwy plików bez dodatkowychls
informacjiźródło
find -printf0 '...' | sort -z
Dodam tylko do odpowiedzi Carletta. Aby uzyskać bardzo użyteczny widok plików, możesz przesłać dane wyjściowe do ls.
find . -maxdepth 1 -type f|ls -lt|less
Pokazuje ostatnio zmodyfikowane pliki w formacie listy, co jest bardzo przydatne, gdy pobrałeś dużo plików i chcesz zobaczyć niezakłóconą wersję ostatnich.
źródło
ls
nie czyta standardowego wejścia, więc potokowanie czegokolwiek do potoku jest bezcelowels
. Tęskniłeśxargs
?find
polecenie w tej odpowiedzi jest całkowicie ignorowane ; ogólne polecenie jest takie samo jakls -lt | less
, które nie przeprowadza filtrowania typów.find
możesz to zrobićfind . -maxdepth 1 -type f -ls
. Wydaje się również do pracy na Mac OS, chociaż wierzę,-maxdepth
i-ls
nie są właściwie opcje przenośne."find '-maxdepth'" nie działa z moją starą wersją basha, dlatego używam:
dla f w $ (ls); zrób, jeśli [-f $ f]; następnie echo $ f; fi; Gotowe
źródło
for f in $(ls)
jest podwójnie błędne. Możesz to naprawić,for f in *
ale wtedy by się zepsuł, ponieważ nie cytujesz argumentuecho
poprawnie.