Да, 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
в globstar с включенным bash действительно рекурсивно удалит все соответствующие файлы в подпапках.
rm -f {*.xvg,.*.xvg}
удалить также скрытые файлы. Иrm -R -f {*.xvg,.*.xvg}
убрать также каталоги.