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

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"

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.


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"}


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.