Как удалить все файлы с определенным расширением в определенной папке?

Как удалить все файлы с определенным расширением в определенной папке?

Если я устанавливаю текущий/рабочий каталог (переходя в него с помощью cd) на какой-то определенный каталог, а затем ввожу:

rm *.xvg

Что сделает эта команда? Правда ли, что указанная выше команда сделаеттолькоудалить файлы с расширением.xvg тольков рабочем каталоге?

Я волновался, прежде чем попробовать это, потому что я хотел быть абсолютно уверен, что указанная выше команда удалит только .xvgфайлы.РАСПОЛОЖЕНО В РАБОЧЕМ КАТАЛОГЕ.

решение1

Да, rm *.xvgбудеттолькоудалите файлы с указанным расширением в вашемтекущийкаталог.

АхорошийЧтобы убедиться, что вы действительно находитесь в каталоге, из которого хотите удалить файлы, можно воспользоваться командой pwd, которая отобразит ваш текущий каталог, а затем выполнить команду , lsчтобы убедиться, что вы нашли нужные файлы.

Если вы немного опасаетесь отдавать команду rm, есть 2 вещи, которые вы можете сделать:

  1. введите ls *.xvg, чтобы увидеть список файлов, на которые будет влиять эта команда.

  2. Если у вас нетмногофайлов, вы всегда можете использовать -iпереключатель командной строки для rm(также существует для cpи mv). Использование rm -i *.xvgбудет спрашивать вас для каждого отдельного файла, можно ли его удалить, так что вы можете быть уверены, что ничего неожиданного не будет удалено. (Хотя это будет утомительно, если у вас много файлов :)

решение2

Вам не нужно переходить в каталог, просто используйте

rm /some/dir/*.xvg 

В случае, если у вас опечатка или подобная ошибка в пути, где /som/dir не существует:

cd /som/dir
rm *.xvg

случайно удалит все .xvg-файлы в текущем каталоге. Первая команда этого не сделает, и вам не нужно будет возвращаться обратно.

Альтернативным способом было бы использование find:

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete 

решение3

Да, 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здесь. Одним из наиболее распространенных расширений является *, которое расширяется до имен файлов в текущем каталоге.

Простой способ взглянуть на работу globs — использовать echo, который выводит все аргументы, переданные ему через оболочку. Так что ввод echo *в том же каталоге выведет foo.bar. Так что когда вы вводите rm *.bar, на самом деле происходит следующее: оболочка расширяет список аргументов до foo.bar, а затем передает его команде rm.

Есть несколько способов управления подстановкой. Например, в последних версиях bash можно включить опцию globstar, которая будет выполнять рекурсивное расширение. Ввод echo **/*.barпокажет список всех файлов, заканчивающихся на , .barво всех подпапках. Так что ввод rm **/*.barglobstar enabled bash действительно рекурсивно удалит все соответствующие файлы в подпапках.

решение4

Команда:

  rm ./*.pgm

работает для меня

Команда:

rm *.pgm

выдает команду об ошибке (на польском языке, переведено):

rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.

в

bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)

Связанный контент