Załóżmy, że mam dwa pliki /tmp
:
root@ubuntu:~# touch /tmp/hello.{pyc,py}
root@ubuntu:~# ls /tmp/
hello.py hello.pyc
Teraz uruchommy rm -rf
polecenie z opcją [co]
root@ubuntu:~# rm -rf /tmp/hello.py[co]
root@ubuntu:~# ls /tmp/
hello.py
Czy ktoś może wyjaśnić, co się tutaj dzieje? Jaki jest [co]
parametr? Jak możemy sprawić, by działał dla innych rozszerzeń? Powiedzmy mam foo.js
i foo.coffee
pliki, możemy zrobić coś rm -rf /tmp/foo.coffe[co]
, aby usunąć /tmp/foo.js
?
command-line
bash
rm
aneeshep
źródło
źródło
-rf
, ponieważ nie są to ani katalogi (--recursive
), ani niezaprzeczalne (--force
).-rf
i nie trzeba robić rzeczy jako root. Zwłaszcza jeśli chodzi o te rzeczyrm -rf
.[co]
powłoki glob. Dzięki.Odpowiedzi:
[co]
Nie jest to parametr dorm
komendy - to glob shell , który pasuje do wzorca równa jeden znak ze zbioru[co]
- innymi słowy, pasuje zarówno doc
alboo
do końca pliku. Odman bash
:Aby dopasować oba,
foo.coffee
afoo.js
ponieważ sufiksy nie zawierają w ogóle żadnych wspólnych podciągów, najlepiej jestfoo.*
dopasować dowolną nazwę pliku zaczynającą się odfoo.
Zamiast tego można użyć rozszerzenia nawiasów np.źródło
[abc]
lub*
będą wyszukiwać pliki, podczas gdy{}
nie będą. przejdź do / tmp, wpiszecho nya[ab]; echo nya{a,b}
, potemtouch nyaa
i znowuecho nya[ab]; echo nya{a,b}
To nie jest parametr, ale zbiór liter (lub „glob globu”). To jest to samo:
jest taki sam jak
Podobne ...
usunie cokolwiek z następujących po kolejności ASCII
/tmp/hello.pyc
włącznie/tmp/hello.pyo
.usunąłby ...
Możesz tworzyć dość fantazyjne metody, ale dla tych 2 plików po prostu usunę je za pomocą jednego polecenia dla każdego. Kolejny przykład zbliżenia się do tych 2 plików ...
usuną takie pliki ...
więc zawierałby znacznie więcej niż tylko te 2 pliki.
źródło
rm -rf
ze wszystkimi dopasowaniami, a nie wiele wywołań z każdym dopasowaniem.To glob powłoki, podobny do symboli wieloznacznych
*
i?
... w bash, wzorzec nazw plików*.[co]
pasuje do wszystkich nazw plików, które kończą się na.c
lub.o
.Różnica w
*.[co]
porównaniu z*.c *.o
lub*.{c,o}
polega na tym, że dwa ostatnie wzorce rozwiną się w atrapę,*.o
jeśli.o
w katalogu nie będzie żadnych plików, a*.[co]
wersja nie.Globusy powłoki są przydatne do wykonywania operacji na plikach bez rozróżniania wielkości liter. Na przykład, jeśli masz kilka pliki, które kończą się
jpg
,JPG
,Jpg
,JPg
, etc ... i chcesz usunąć wszystkie z nich można zrobić:źródło