wyklucz niektóre pliki w ls

61

Chciałbym uruchomić ls i wykluczyć niektóre pliki z danych wyjściowych.

Po uruchomieniu następującego polecenia otrzymuję wszystkie pliki z każdym w jednym wierszu:

$ ls -1
file1
file2
file3
temp

Chciałbym uruchomić to polecenie w taki sposób, aby było widoczne

$ ls -1 <insert magic here> temp
file1
file2
file3
Alice Ryhl
źródło

Odpowiedzi:

82
ls -I <filename>

-I = Zignoruj ​​nazwę pliku, tzn. Nie wymieniaj określonego pliku.

Aby zignorować więcej niż jeden plik, dodaj -I przed każdą nazwą pliku.

ls -I file1 -I file2

Aby zignorować pliki według ich rozszerzeń nazw, wykonaj na przykład następujące czynności.

ls -I "*.jpg" -I "*.svg"
Sudheer
źródło
4
Jeśli użyjesz opcji długiej formy --ignore, możesz rozszerzyć ją na wzorce ls --ignore="file?"ls --ignore="file*"
globów,
3
możesz używać wzorców
globalnych
18

Dla mnie, jeśli użyję -I raz, to działa, ale jeśli użyję dwa razy, to nie. np .: ls -I *.csvdziała.

Ale ls -I *.csv -I *.txtnie działa i zamiast tego zwraca pliki TXT.

--ignore zrobił dla mnie lewę. Tego potrzebowałem i pracowałem.

ls -lhrt --ignore="*.gz" --ignore="*.1"

Spowoduje to wyświetlenie listy plików z folderu dziennika, w którym wykluczone są stare dzienniki kopii zapasowych.

Damodar Bashyal
źródło
3
cytowanie * .csv w pierwszej formie działa, np ls -I '*.txt'. Powodem, dla którego nie działa bez cudzysłowu, jest rozszerzenie powłoki, tzn. Mówisz powłoce, aby wyświetlała listę wszystkich plików csv zamiast ich wykluczać. Faktycznie dzieje się tak, że ignoruje on pierwsze pliki .csv i .1 po rozwinięciu, ale wymienia pozostałe
verboze
Podwójne cytowanie również działało dla mnie. Dzięki @verboze
user38537
to jest łatwiejsze. Dzięki.
Philippe Delteil
6

ls --ignore={"*.jpg","*.png","*.svg"}

Kartikey Tanna
źródło
4
Jest to po prostu użycie rozszerzenia nawiasów bash, aby uzyskać trzy --ignoreopcje. Mógłbyś także użyć--ignore="*."{jpg,png,svg}
muru
1

Myślę, że to daje wynik, którego szukasz:

ls -1 !(temp)

Najwyraźniej musisz shopt -s extglobto zadziałać
(mam włączone, więc myślę, że w odległej przeszłości było to przydatne i włączyłem).

Myślę, że możesz również użyć grep do filtrowania danych wyjściowych:

ls -1 | grep -v '^temp$'

Korzystanie z potoku i filtrów zapewnia o wiele większą elastyczność i umiejętności, które można przenieść na inne polecenia / sytuacje, chociaż w tym konkretnym przypadku możesz nie być tym zainteresowany.

Max Waterman
źródło