Так, rm *.xvg
буде видалено лише ті файли, які закінчуються .xvg
у вашому поточному каталозі. Ось чому.
Коли ви вводите таку команду, робота розбивається між оболонкою, яку ви використовуєте (припустимо, bash) і бінарною командою.
Ви можете знайти бінарне, ввівши which rm
. Ця маленька програма піклується про від’єднання файлів. Такі програми можна запускати з командного рядка і можуть читати список аргументів prog arg1 arg2 arg3
під час їх запуску. У разі rm
вони трактуються як список повністю кваліфікованих імен файлів, які потрібно видалити. Отже, якщо ви знаходитесь в каталозі, що містить файл foo.bar
, введення тексту delete 'foo.*'
призведе до rm: foo.*: No such file or directory
. Зверніть увагу на одиничні лапки навколо шаблону файлу, вони говорять оболонці передати аргумент оболонці таким, яким він є.
Однак якщо ви введете rm *.bar
в одному каталозі, він видалить файл. Тут відбувається те, що ваша оболонка, яка є програмою, яку ви використовуєте для введення команд, виконує деякі перетворення, перш ніж передавати аргументи команді. Одне з них називається "розширення імені файлу", інакше його називають "глобальним". Список розширень імені файлів bash можна переглянути тут . Одне з найпоширеніших розширень - *
це розширене до назви файлів у поточному каталозі.
Простий спосіб поглянути на глобус на роботі - це використання echo
, який виводить назад всі аргументи, передані йому через оболонку. Таким чином, введення echo *
в один і той же каталог виведе foo.bar
. Отже, коли ви вводите rm *.bar
, що насправді відбувається, це те, що оболонка розширює список аргументів на foo.bar
, а потім передає це rm
команді.
Існують деякі способи контролю глобалізації. Наприклад, в останніх версіях bash можна ввімкнути опцію під назвою globstar, яка буде робити рекурсивне розширення. Введення тексту echo **/*.bar
покаже список усіх файлів, що закінчуються .bar
у всіх підпапках. Отже, набравши rm **/*.bar
bash з включеною глобальною програмою, рекурсивно видалять усі відповідні файли в підпапках.
rm -f {*.xvg,.*.xvg}
для видалення також прихованих файлів. Іrm -R -f {*.xvg,.*.xvg}
видаляти також каталоги.