Chcę utworzyć listę wszystkich plików w katalogu, nie wymieniając żadnego z podkatalogów znajdujących się w tym samym katalogu, i wydrukować tę listę do nowego pliku.
ls -d * > filelist
utworzy listę wszystkich plików w bieżącym katalogu, ale wyświetli również podkatalogi w bieżącym katalogu. Wypróbowałem find
polecenie, używając -maxdepth 1
opcji - jednak format wyjściowy jest problemem, ponieważ find również wypisuje ścieżkę wraz z nazwami plików.
Jeśli ktoś mógłby mi powiedzieć, może inne polecenie lub opcje, które utworzą listę wyjściową tylko plików w katalogu, a nie nazwy podkatalogów lub ich zawartości, byłbym wdzięczny.
ls -d *
tylko pliki i foldery w bieżącym folderze, z wyjątkiem ukrytych plików / folderów tutaj;Odpowiedzi:
Rozwiązanie oparte na znalezieniu:
Rozwiązanie oparte na Bash:
Rozwiązanie oparte na bash zapewni ci wszystko, co nie jest katalogiem; będzie zawierać rzeczy takie jak nazwane potoki (prawdopodobnie tego chcesz). Jeśli chcesz tylko pliki , użyj
find
polecenia lub jednego z tych:Jeśli zamierzasz używać tego regularnie, możesz oczywiście umieścić go w aliasie gdzieś w
~/.bashrc
:Ponieważ w komentarzach zauważyłeś, że faktycznie korzystasz z OSX, a nie Ubuntu, sugeruję, aby następnym razem kierować pytania do Apple lub bardziej ogólnych stron Unix i Linux Stack Exchange.
źródło
Pokaż tylko nazwy plików:
Lista tylko katalogów:
grep -v -e ^ $ służy do usuwania pustych linii z wyniku.
Więcej szczegółów :
flaga ls -p umieszcza „/” na końcu nazwy katalogu, flaga -R służy do wyszukiwania rekurencyjnego, -l do wyświetlania informacji, -a do wyświetlania wszystkich informacji (w tym ukrytych plików), grep -v flaga służy do odwracania wyniku, a flaga -e do dopasowania wyrażenia regularnego.
źródło
Aby wyświetlić tylko zwykłe pliki:
Z dołączonymi symbolicznymi linkami:
Gdzie pierwszy znak listy opisuje typ pliku,
-
oznacza to, że jest to zwykły plik, ponieważ link symboliczny tol
.Debian / Ubuntu
Wydrukuj nazwy wszystkich pasujących plików (łącznie z linkami):
Z absolutnymi ścieżkami:
Wydrukuj nazwy wszystkich plików,
/etc
które zaczynają sięp
i kończą nad
:źródło
Kolejne rozwiązanie, naiwnie krótkie, które dla mnie zadziałało:
źródło
ls -alR |grep -E '^-'
Sugerowałbym użyć find i po prostu usunąć nazwę katalogu z danych wyjściowych, jeśli to konieczne:
źródło
-maxdepth 1
powinien pojawić się przed jakimkolwiek filtrem i możesz osiągnąć ten wynik bez korzystaniased
z-printf
opcji, tj .:find . -maxdepth 1 -type f -printf '%f\n'
(będzie to bardziej wydajne niż używanie dodatkowego programu).Inną możliwą opcją jest
W
--file-type
kładzie / na koniec folderach (ale także o @ na koniec łączy symbolicznych.The grep -v '/'
Usuwa podkatalogi (bo teraz kończyć się znakiem „/”). Wsed s/@$//
usuwa ten @. -1 drukuje jeden plik na linię tak aby grep -v działał poprawnie.źródło
-1
nie ma znaczenia, aby grep nie był potrzebny; jeśli chcesz-a
ls
ls -F | grep -v '/' | sed s/[@*]$// > filelist