Jeśli chcesz usunąć wszystkie pliki, których nazwy pasują do określonego formularza, najprostszym rozwiązaniem jest użycie symbolu wieloznacznego (wzorzec glob). Kilka przykładów:
$ rm -f abc.log.* # Remove them all
$ rm -f abc.log.2012* # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]* # Remove all files from the first quarter of 2012
Wyrażenia regularne mają większe możliwości niż symbole wieloznaczne; możesz podać wyjście grep
do rm -f
. Na przykład, jeśli niektóre nazwy plików zaczynają się od, "abc.log"
a inne od "ABC.log"
, grep
umożliwia dopasowanie bez rozróżniania wielkości liter:
$ rm -f $(ls | grep -i '^abc\.log\.')
Spowoduje to problemy, jeśli którakolwiek z nazw plików zawiera zabawne znaki, w tym spacje. Bądź ostrożny.
Kiedy to robię, ls | grep ...
najpierw uruchamiam polecenie i sprawdzam, czy generuje dane wyjściowe, których potrzebuję - zwłaszcza jeśli używam rm -f
:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
gdzie !!
rozwija się do poprzedniego polecenia. Lub mogę wpisać strzałkę w górę lub Ctrl-P i edytować poprzednią linię, aby dodaćrm -f
polecenie.
Zakłada się, że używasz powłoki bash. Niektóre inne powłoki, szczególnie csh i tcsh oraz niektóre starsze powłoki wyprowadzone z sh, mogą nie obsługiwać $(...)
składni. Możesz użyć równoważnej składni backtick:
$ rm -f `ls | grep -i '^abc\.log\.'`
Plik $(...)
Składnia jest bardziej czytelna, a jeśli jesteś naprawdę ambitny może być zagnieżdżona.
Wreszcie, jeśli podzbioru plików, które chcesz usunąć, nie można łatwo wyrazić za pomocą wyrażenia regularnego, sztuczka, której często używam, polega na umieszczeniu plików w tymczasowym pliku tekstowym, a następnie edytowaniu go:
$ ls > list
$ vi list # Use your favorite text editor
Mogę wtedy list
ręcznie edytować plik, pozostawiając tylko te pliki, które chcę usunąć, a następnie:
$ rm -f $(<list)
lub
$ rm -f `cat list`
(Ponownie zakłada się, że żadna z nazw plików nie zawiera zabawnych znaków, zwłaszcza spacji).
Lub podczas edycji list
pliku mogę dodać rm -f
na początku każdego wiersza, a następnie:
$ . ./list
lub
$ source ./list
Edycja pliku to także możliwość dodania cytatów w razie potrzeby, na przykład zmiany rm -f foo bar
na rm -f 'foo bar'
.