Если я установлю текущий / рабочий каталог (перейдя к нему с помощью cd
) в какой-то конкретный каталог, а затем введите:
rm *.xvg
Что будет делать эта команда? Правда ли, что приведенная выше команда удалит только файлы с расширением .xvg
только в рабочем каталоге?
Я нервничал, пытаясь это сделать, прежде чем спрашивать, потому что я хочу быть абсолютно уверен, что приведенная выше команда удалит только .xvg
файлы, расположенные в рабочем каталоге .
rm -f {*.xvg,.*.xvg}
удалить также скрытые файлы. Иrm -R -f {*.xvg,.*.xvg}
убрать также каталоги.Вам не нужно переходить в каталог, просто используйте
В случае, если у вас есть опечатка или похожая ошибка в пути, где / som / dir не существует:
случайно удалит все .xvg-файлы в текущем каталоге. Первая команда не будет, и вам не нужно снова возвращаться.
Альтернативным способом было бы использовать find:
источник
Да,
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 действительно рекурсивно удалит все соответствующие файлы в подпапках.источник
Команда:
работает для меня
Команда:
выдает ошибку (на польском, переведено):
в
источник