Что означает [co] в команде «rm -rf filename [co]»?

Допустим, у меня есть два файла в / 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[cohibited, чтобы удалить /tmp/foo.js ?

16
задан 21 July 2016 в 06:23

3 ответа

[co] не параметр к rm команда - это - шарик оболочки, который соответствует шаблону, равному отдельному символу от набора [co] - другими словами, это соответствует любому a c или o конец имени файла. От man bash:

[...]  Matches any one of the enclosed characters

Соответствовать обоим foo.coffee и foo.js, так как суффиксы не содержат общих подстрок вообще, лучшее, которое Вы могли сделать, foo.* который соответствовал бы любому имени файла, запускающемуся с foo. Вместо этого Вы могли использовать расширение фигурной скобки, например.

rm foo.{coffee,js}
34
ответ дан 23 November 2019 в 02:26

Это не параметр, а набор букв (или "шарик оболочки"). Это - то же:

rm -rf /tmp/hello.py[co]

совпадает с

rm -rf /tmp/hello.pyc
rm -rf /tmp/hello.pyo
<час>

Подобный...

rm -rf /tmp/hello.py[c-o]

удалил бы что-либо от /tmp/hello.pyc до и включая /tmp/hello.pyo после упорядочивания ASCII.

rm -rf /tmp/hello.py[ab][cd]

удалил бы...

rm -rf /tmp/hello.pyac
rm -rf /tmp/hello.pyad
rm -rf /tmp/hello.pybc
rm -rf /tmp/hello.pybd
<час>

говорят, у меня есть foo.js и foo.coffee файлы, можем мы делать что-то как rm -rf /tmp/foo.coffe[co] для удаления /tmp/foo.js.

можно сделать довольно необычные методы, но для тех 2 файлов я просто удалил бы их с 1 командой для каждого. Другой пример, становящийся максимально близким к тем 2 файлам...

rm /tmp/foo.[cj]*

удалил бы файлы как это...

rm /tmp/foo.c*
rm /tmp/foo.j*

, таким образом, это включало бы намного больше, чем просто эти 2 файла.

16
ответ дан 23 November 2019 в 02:26

Это - шарик оболочки, подобный подстановочным знакам * и ? ... в ударе, шаблоне имени файла *.[co] соответствия все имена файлов тот конец с .c или .o.

Различие с *.[co] по сравнению с *.c *.o или *.{c,o} это, два последних шаблона расширятся до макета *.o если нет .o файлы существуют в каталоге, в то время как *.[co] версия не будет.

Шарики Shell полезны для того, чтобы сделать операции файла нечувствительным к регистру способом. Например, если у Вас есть набор файлов с именами файлов тот конец с jpg, JPG, Jpg, JPg, и т.д.... и Вы хотите удалить всех их, можно сделать:

rm *.[Jj][Pp][Gg]
1
ответ дан 23 November 2019 в 02:26

Другие вопросы по тегам:

Похожие вопросы: