Допустим, у меня есть два файла /tmp
:
root@ubuntu:~# touch /tmp/hello.{pyc,py}
root@ubuntu:~# ls /tmp/
hello.py hello.pyc
Теперь давайте запустим rm -rf
команду с опцией [co]
root@ubuntu:~# rm -rf /tmp/hello.py[co]
root@ubuntu:~# ls /tmp/
hello.py
Может кто-нибудь объяснить, что здесь происходит? Какой [co]
параметр? Как мы можем заставить его работать для других расширений? Скажем, у меня есть foo.js
и foo.coffee
файлы, мы можем сделать что-то вроде rm -rf /tmp/foo.coffe[co]
удаления /tmp/foo.js
?
command-line
bash
rm
aneeshep
источник
источник
-rf
, поскольку они не являются каталогами (--recursive
) и не записываются (--force
).-rf
и нет необходимости делать что-либо как root. Особенно если речь идет о вещахrm -rf
.[co]
ракушке. Благодарю.Ответы:
[co]
не является параметром дляrm
команды - это оболочка Glob , что соответствует , равным одному символу из набора рисунка[co]
- другими словами, он соответствует илиc
илиo
в конец файла. Отman bash
:Для того, чтобы соответствовать как
foo.coffee
иfoo.js
, так как суффиксы не содержат каких - либо общих подстрок на все лучшее , что вы можете сделать , этоfoo.*
который будет соответствовать любое имя файла , начиная сfoo.
Вместо этого вы можете использовать скобки расширения , например ,источник
[abc]
или*
будет искать файлы, пока{}
не будет. перейдите в / tmp, наберитеecho nya[ab]; echo nya{a,b}
, затемtouch nyaa
и сноваecho nya[ab]; echo nya{a,b}
Это не параметр, а набор букв (или «оболочка»). Это тоже самое:
такой же как
Аналогичный ...
удалит что-либо от
/tmp/hello.pyc
до и включая/tmp/hello.pyo
последующий порядок ASCII.удалил бы ...
Вы можете сделать довольно причудливые методы, но для этих двух файлов я бы просто удалил их по 1 команде для каждого. Другой пример, как можно ближе к этим 2 файлам ...
удалил бы файлы как это ...
поэтому он будет включать в себя гораздо больше, чем просто эти 2 файла.
источник
rm -rf
всех совпадений, а не много вызовов для каждого совпадения.Это глобус оболочки, похожий на символы подстановки
*
и?
... в bash шаблон имени файла*.[co]
соответствует всем именам файлов, которые заканчиваются на.c
или.o
.Разница между «
*.[co]
против»*.c *.o
или «в»*.{c,o}
заключается в том, что два последних шаблона будут расширены до фиктивного,*.o
если в.o
каталоге нет файлов, а*.[co]
версия - нет.Глобусы оболочки полезны для выполнения файловых операций без учета регистра. Например, если у вас есть куча файлов с именами файлов , которые заканчиваются
jpg
,JPG
,Jpg
,JPg
и т.д. ... и вы хотите , чтобы удалить все из них, вы можете сделать:источник