Mam katalog, w którym wiele plików (około 200) o tej nazwie temp_log.$$
jest tworzonych z kilkoma innymi ważnymi plikami, które muszę sprawdzić.
Jak mogę łatwo wymienić wszystkie pliki i wykluczyć wyświetlanie temp_log.$$
plików?
Oczekiwany wynik
$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string
Przejrzałem ls
stronę podręcznika, ale nie mogłem znaleźć niczego w tym odnośniku. Daj mi znać, jeśli przegapiłem jakieś istotne informacje tutaj.
Dzięki
ls --hide='temp_log.$$'
powinno działać. Możesz / powinieneś również rozszerzyć to o symbole wieloznaczne, w zależności od tego, która część całego terminutemp_log.$$
jest.Odpowiedzi:
Za pomocą GNU
ls
(wersja na niewbudowanego Linuxa i Cygwina, czasem również znajdowana gdzie indziej), można wykluczyć niektóre pliki podczas wyświetlania katalogu.(zwróć uwagę na długą formę
-I
Is--ignore='temp_log.*'
)Za pomocą Zsh możesz pozwolić powłoce na filtrowanie. Przejdź
-d
dols
, aby uniknąć wyświetlania zawartości pasujących katalogów.Za pomocą ksh, bash lub zsh możesz użyć składni filtrującej ksh. W Zsh, uruchom
setopt ksh_glob
pierwszy. W bash biegnijshopt -s extglob
pierwszy.źródło
-Itemp_log.*
bez spacji po-I
-I
. Trzeba jednak*
cytować w ten czy inny sposób.-I temp_log.*
nie działa, ale-I 'temp_log.*'
,-I "temp_log.*"
,-I temp_log.\*
, itd. są w porządku.Możesz używać
grep
z tą opcją-v
.źródło
Możesz użyć
find
do tego:Spowoduje to po prostu wydrukowanie nazw, które można dodać,
-ls
aby uzyskaćls -l
styl z sygnaturą czasową i uprawnieniami, lub użyć-exec ls {} +
do przekazania do ls z dowolnymi opcjami dla kolumn, sortowania itp.Napisałem to, zakładając, że to tylko pliki w katalogu. Jeśli katalog zawiera inne katalogi, możesz uniknąć ich rekurencyjnego wyświetlania
A jeśli użyjesz ls, będziesz chciał przekazać opcję -d, aby zatrzymać wyświetlanie jej w katalogach:
-exec ls -d {} +
źródło
-maxdepth 1
naśladować nierekurencyjnels
.find
bez,-maxdepth
powinni zajrzeć tutaj .Myślę, że chcesz użyć funkcji powłoki, a nie
ls
. Używam bash, więc sprawdziłem, co chceszman bash
. Wyszukaj „^ EXPANSION”, (najpierw naciskając „/”). Fragment:Niedawno zacząłem wykluczać pliki na podstawie ich pierwszej litery za pomocą polecenia:
To pasowałoby do wszystkiego, co nie zaczyna się na literę
t
. Jeśli dodasz więcej znaków między nawiasami, wykluczasz także pliki zaczynające się od tych liter.Szukam linku, a ja mam dobry! Zobacz Dopasowywanie wzorów . Odtąd zadziałałoby to w twoim przypadku:
Wymaga to włączenia
extglob
opcji powłoki za pomocąshopt
wbudowanego (shopt -s extglob
), jak stwierdził Gilles .źródło
Po prostu zrób
źródło
grep
szuka wzorca w pliku, a nie w nazwie pliku.Ponieważ pliki, których NIE ZWRÓCISZ chcesz wydrukować, mają „temp_log”. w nazwie pliku, a następnie odfiltruj za pomocą grep:
UWAGA: Drugi post z podobną odpowiedzią prawdopodobnie został odrzucony, ponieważ użytkownik nie uwzględnił cudzysłowów wokół ciągu, którego powinien szukać grep. Bez cytatów nie działa tak, jak reklamowano.
źródło
temp_log
. To nie jest dobry (ogólny) sposób wykluczanials
wyników.-F
, @ smokes2345; kropka będzie pasować do dowolnego znaku w podstawowym wyrażeniu regularnym. Zobacz: unix.stackexchange.com/q/119905/117549