Natknąłem się na wzory globowania i symbole wieloznaczne, a szczególnie mnie interesuje [!].
Konstrukcja ta jest podobna do
[!]konstrukcji, z wyjątkiem tego, że zamiast dopasowywać dowolne znaki w nawiasach, będzie pasować do dowolnego znaku, o ile nie będzie wymieniony między[a].
rm myfile [!192]
Powyższe wierzę, że usunie wszystkie / wszystkie pliki, z wyjątkiem jakichkolwiek / wszystkich plików, które mają 192 w nazwie.
Niepokoi mnie jednak prawidłowe użycie tego rozszerzenia pliku, aw szczególności wielu warunków.
Jaka byłaby właściwa składnia w takiej sytuacji?
rm myfile [!.gif .csv. mp3]
lub
rm myfile [!.gif !.csv !.mp3]
Martwię się, że kropka może zostać zgubiona, a więc każdy plik z .(który z nich by był na pewno?) Zostałby zmanipulowany, gdy chcę spowodować manipulację konkretnymi plikami.
Konstrukcja ta jest podobna do [ ]konstrukcji, z wyjątkiem tego, że zamiast dopasowywać dowolne znaki w nawiasach, będzie pasować do dowolnego znaku, o ile nie będzie wymieniony między [a ].
(cytowany z http://www.tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm )
Teraz; dla mnie, co sugeruje, że liczba pojedyncza !jest wystarczająca, a wszystkie wartości w nim zawarte są zawarte w zakresie.
[!]jest podobny, ale nie taki[!]
^ma dokładnie to samo znaczenie, co !w tym kontekście, dlatego [^a]wyklucza adokładnie tak, jak [!a]robi: Jeśli pierwszy znak następujący po [jest! lub ^, dopasowywany jest dowolny znak nie dołączony. ( man bash)
rm myfile [!192]usunie myfile, a także każdy plik jednoznakowy 1, który nie ma nazwy 9, lub 2.
ls my-patternlub,echo my-commandaby sprawdzić, czy globowanie jest wykonywane tak, jak chcesz, przed uruchomieniemrm