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
--ignore
, możesz rozszerzyć ją na wzorcels --ignore="file?"
ls --ignore="file*"
Dla mnie, jeśli użyję -I raz, to działa, ale jeśli użyję dwa razy, to nie. np .:
ls -I *.csv
działa.Ale
ls -I *.csv -I *.txt
nie 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.
źródło
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łels --ignore={"*.jpg","*.png","*.svg"}
źródło
--ignore
opcje. Mógłbyś także użyć--ignore="*."{jpg,png,svg}
Myślę, że to daje wynik, którego szukasz:
Najwyraźniej musisz
shopt -s extglob
to 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:
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.
źródło