Jak wykluczyć katalogi podczas wyświetlania plików w bieżącym katalogu?
ls .
^ uwzględni katalogi na liście.
Jak wykluczyć katalogi podczas wyświetlania plików w bieżącym katalogu?
ls .
^ uwzględni katalogi na liście.
Odpowiedzi:
Spróbuj tego:
find . -maxdepth 1 -not -type d
ls .
bez katalogów - i oto jest.
-ls
lub -exec ls -l {} \;
sprawiłoby, że byłoby to ls -l
bez katalogów.
Aby uzyskać dokładnie taką samą wartość, ls .
nie musisz pokazywać ukrytych katalogów.
find . -maxdepth 1 -not -type d -and -not -name '.*'
i to wciąż pozostawia prefiks „./” do każdej nazwy pliku. To naprawdę nie jest problem, ale myślę, że to trochę brzydkie. Poszedłem z:
ls -p | grep -v '/$'
Dzięki temu otrzymasz listę, która wygląda tak samo i możesz dodać dodatkowe ls
argumenty. Dodaj a, --color=always
a odzyskasz dircolors lub -a
zobaczysz ukryte pliki.
Podoba mi się odpowiedź Aleksandra, ponieważ tak naprawdę zależy on od systemu plików charakterystycznego dla danego pliku, więc nie da się go oszukać. Moja odpowiedź zostanie oszukana przez plik, który ma „/” jako ostatni znak w nazwie. Ale wygląda na to, że wymaga kłopotów.
Spróbuj tego:
$ znajdź. -type f -maxdepth 1
albo to:
$ ls -p | egrep -v / $
$ ls -la | egrep -v ^ d
Chociaż jest to stary post, ale pomyślałem, że to może pomóc ...
$ ls -l | grep -v ^ d
Wyświetli listę wszystkich plików, w tym dowiązań symbolicznych, znaków i plików bloków.
Powyższe rozwiązania „znajdź” tracą niektóre możliwości ls - na przykład: wyświetlaj tylko pliki, posortowane według malejącego czasu modyfikacji.
Odpowiedzi „ls -p | grep” nie zajmują się elegancko innymi elementami ls, takimi jak -R, gdyby były pożądane
Poniższa odpowiedź, choć bardziej szczegółowa, moim zdaniem odzwierciedla najprawdziwsze zachowanie ls i największą elastyczność w wybieraniu „tylko plików”
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
Wystarczy wymienić przełączniki ls zgodnie z potrzebami, a wynik zostanie zwrócony tylko z plikami. Jeśli wymagane są również linki i inne elementy, należy przeprowadzić drobną przeróbkę testu w celu włączenia.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
Dzięki temu możesz nadal korzystać z innych opcji, które ls
zwykle biorą. Lub ... usuń, -v
aby wyświetlić tylko katalogi. Lub ... zamień katalog na inny typ pliku, który file
rozumie i raportuje, jak ASCII, pusty, ELF i tak dalej.
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
jest około 3 razy szybszy w moich testach
Byłem w systemie, w którym find
plik binarny nie obsługiwał -not
i skończyło się na użyciu:
ls|while read f;do [ -f "$f" ]&& echo $f;done
Zalety: Nie polega na niczym innym niż sh ls echo
Jest kompatybilny z bash i myślnikiem
Można go zmienić, aby pasował do innych rzeczy (takich jak katalogi), zmieniając -f
Jest szybszy niż niektóre odpowiedzi i zużywa mniej pamięci RAM i procesora