- How can I delete all files with a particular extension in a particular folder?
- 4 Answers 4
- 3 способа удалить все файлы в каталоге, кроме одного или нескольких файлов с расширениями
- Удаление файлов с помощью расширенных операторов сопоставления с образцом
- Удалить файлы с помощью команды поиска Linux
- Удалить файлы с помощью переменной Bash GLOBIGNORE
- Как легко удалить файлы в Linux
- Удаление файлов из Linux с помощью файлового менеджера
- Удаление файлов из Linux через терминал
- Удаление файлов в Linux: особенности работы с командой «rm
- Удаление одного файла Linux
- Удаление нескольких файлов в Linux
- Удаление файлов Linux определенного формата
- Удаление определенных типов файлов
- Удалить все файлы в заданной папке
How can I delete all files with a particular extension in a particular folder?
If I set the current/working directory (navigating to it using cd ) to some particular directory and then type:
What will this command do? Is it true that the above command will only delete files with the extension .xvg only in the working directory? I was nervous about trying this before asking, because I want to be absolutely sure that the above command will only delete .xvg files LOCATED IN THE WORKING DIRECTORY.
4 Answers 4
Yes, rm *.xvg will only delete the files with the specified extension in your current directory.
A good way to make sure you are indeed in the directory you want delete your files is to use the pwd command which will display your current directory and then do an ls to verify you find the files you are expecting.
If you are bit apprehensive about issuing the rm command, there are 2 things you can do:
- type ls *.xvg to see a list of what files would be affected by this command.
- Unless you have a lot of files, you could always also use the -i command line switch for rm (also exists for cp and mv ). Using rm -i *.xvg would prompt you for each individual file if it was ok to delete it, so you could be sure nothing you didn’t expect was getting deleted. (This will be tedious if you have a lot of files though 🙂
You don’t need to navigate to the dir, just use
In the case you have a typo or similar mistake in the path, where /som/dir does not exist:
will accidentally delete all .xvg-files in the current dir. The first command will not, and you don’t need to cd back again.
An alternative way would be to use find:
find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete
find /some/dir/ -maxdepth 1 -type f -name «*.xvg» -delete worked for me! use -maxdepth «n» to delete matching files in sub directory if given path
Yes, rm *.xvg will only delete files ending with .xvg in your current directory. Here’s why.
When you type a command like this, work is split up between the shell you are using (let’s assume bash) and the command binary.
You can locate the binary by typing which rm . This little program takes care of unlinking files. Programs like this can be started from the command line and can read a list of arguments prog arg1 arg2 arg3 when they start up. In the case of rm , they are interpreted as a list of fully qualified filenames to be deleted. So if you are in a directory containing the file foo.bar , typing delete ‘foo.*’ will result in rm: foo.*: No such file or directory . Note the single quotes around the file pattern, they tell the shell to pass the argument to the shell as it is.
However if you type rm *.bar in the same directory, it will delete the file. What’s happening here is that your shell, which is the program you are using to type in commands, is performing some transformations before passing the arguments on to the command. One of these is called ‘file name expansion’, otherwise know as ‘globbing’. You can see a list of bash file name expansions here. One of the most common expansions is * , which is expanded to filenames in the current directory.
A simple way to look at globs at work is to use echo , which prints back all arguments passed to it through the shell. So typing echo * in the same directory will output foo.bar . So when you type rm *.bar , what’s actually happening is that the shell expands the argument list to foo.bar , then passes that to the rm command.
There are some ways of controlling globbing. In recent versions of bash, for example, you can turn on an option called globstar which will do recursive expansion. Typing echo **/*.bar will show a list of all files ending in .bar in all subfolders. So typing rm **/*.bar in globstar enabled bash will indeed recursively delete all matching files in subfolders.
3 способа удалить все файлы в каталоге, кроме одного или нескольких файлов с расширениями
Иногда вы попадаете в ситуацию, когда вам нужно удалить все файлы в каталоге или просто очистить каталог, удалив все файлы, кроме файлов заданного типа (оканчивающихся определенным расширением).
В этой статье мы покажем вам, как удалять файлы в каталоге, кроме определенных расширений или типов файлов, с помощью команд rm, find и globignore.
Прежде чем мы двинемся дальше, давайте начнем с краткого рассмотрения одной важной концепции Linux — сопоставления имен файлов с образцом, которая позволит нам решить нашу проблему.
В Linux шаблон оболочки представляет собой строку, состоящую из следующих специальных символов, которые называются подстановочными знаками или метасимволами:
- * — соответствует нулю или более символов
- ? — соответствует любому одиночному символу
- [seq] — соответствует любому символу в seq
- [!seq] — соответствует любому символу, не указанному в seq
Здесь мы рассмотрим три возможных метода, в том числе:
Удаление файлов с помощью расширенных операторов сопоставления с образцом
Различные расширенные операторы сопоставления с образцом перечислены ниже, где список-шаблонов — это список, содержащий одно или несколько имен файлов, разделенных символом | :
- *(список-шаблонов) — соответствует нулю или более вхождений указанных шаблонов
- ?(список-шаблонов) — соответствует нулю или одному вхождению указанных шаблонов
- +(список-шаблонов) — соответствует одному или нескольким вхождениям указанных шаблонов
- @(pattern-list) — соответствует одному из указанных шаблонов
- !(список-шаблонов) — соответствует чему угодно, кроме одного из заданных шаблонов
Чтобы использовать их, включите параметр оболочки extglob следующим образом:
1. Чтобы удалить все файлы в каталоге, кроме имени файла, введите следующую команду:
2. Чтобы удалить все файлы, кроме filename1 и filename2:
3. В приведенном ниже примере показано, как удалить все файлы, кроме всех файлов .zip , в интерактивном режиме:
4. Затем вы можете удалить все файлы в каталоге, кроме всех файлов .zip и .odt , следующим образом, отображая то, что сделанный:
Получив все необходимые команды, отключите параметр оболочки extglob следующим образом:
Удалить файлы с помощью команды поиска Linux
В этом методе мы можем использовать команду find исключительно с соответствующими параметрами или в сочетании с командой xargs, используя конвейер, как в формах ниже:
$ find /directory/ -type f -not -name 'PATTERN' -delete $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I <> rm <> $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I <> rm [options] <>
5. Следующая команда удалит все файлы, кроме файлов .gz в текущем каталоге:
$ find . -type f -not -name '*.gz'-delete
6. Используя конвейер и xargs, вы можете изменить приведенный выше случай следующим образом:
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I <> rm -v <>
7. Рассмотрим еще один пример. Приведенная ниже команда удалит все файлы, кроме .gz , .odt и . .jpg файлы в текущем каталоге:
$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
Удалить файлы с помощью переменной Bash GLOBIGNORE
Однако этот последний подход работает только с bash. Здесь переменная GLOBIGNORE хранит разделенный двоеточиями список шаблонов (имен файлов), которые следует игнорировать при раскрытии пути.
Чтобы использовать этот метод, перейдите в каталог, который вы хотите очистить, затем установите переменную GLOBIGNORE следующим образом:
$ cd test $ GLOBIGNORE=*.odt:*.iso:*.txt
В этом случае все файлы, кроме файлов .odt , .iso и .txt , будут удалены из текущего каталога.
Теперь запустите команду для очистки каталога:
После этого отключите переменную GLOBIGNORE:
Примечание. Чтобы понять значение флагов, используемых в приведенных выше командах, обратитесь к справочным страницам каждой команды, которую мы использовали на различных иллюстрациях.
Вот и все! Если у вас есть какие-либо другие методы командной строки для той же цели, не забудьте поделиться с нами через наш раздел обратной связи ниже.
Как легко удалить файлы в Linux
В Linux вы можете удалить отдельные файлы, несколько файлов или целые каталоги. Однако этот процесс несколько отличается от привычной Windows. Мы покажем вам различные способы как легко удалить файлы в Linux.
Удаление файлов из Linux с помощью файлового менеджера
В зависимости от среды рабочего стола, вы можете найти в своей системе Nautilus, Dolphin или другие файловые менеджеры для Linux. С помощью этих стандартных файловых менеджеров вы можете удалять файлы в Linux всего за несколько шагов.
1. Через файловый менеджер зайдите в файлы, которые вы хотите удалить.
2. Удерживая нажатой левую кнопку мыши, отметьте файлы, которые нужно удалить.
3. Щелчок правой кнопкой мыши на одном из файлов вызовет контекстное меню. В зависимости от среды рабочего стола вы найдете опцию «Отправить в корзину«, «Удалить файлы» или «Удалить«.
Совет: Для удаления файлов в Linux вместо контекстного меню можно использовать клавишу «Delete«.
Удаление файлов из Linux через терминал
Учитывая большое количество команд в терминале Linux, следует ожидать, что командная строка также может быть использована для удаления файлов Linux.
1. Откройте файловый менеджер и найдите файлы, которые вы хотите удалить. Вы также можете использовать команду «cd /путь/к/папке» для перехода к файлам непосредственно из терминала.
2. Или войдите в папку, далее щелкните правой кнопкой мыши на окне, чтобы открыть контекстное меню. Выберите «Открыть в терминале«.
3. С помощью команды «rm» (сокращение от remove) вы можете удалить один или несколько файлов из Linux.
Удаление файлов в Linux: особенности работы с командой «rm
В зависимости от того, хотите ли вы удалить один или несколько файлов Linux или непосредственно все файлы определенного типа. Вам придется использовать команду «rm» следующими способами:
Удаление одного файла Linux
С помощью команды «rm«, за которой следует имя файла, отдельные файлы могут быть быстро и легко удалены с помощью терминала.
Удаление нескольких файлов в Linux
Чтобы удалить несколько файлов, пропишите все имена файлов, разделенные пробелом, после команды «rm».
rm имя_файла.расширение имя_файла.расширение
Удаление файлов Linux определенного формата
Помимо удаления одного или нескольких файлов из Linux, можно удалять конкретные файлы с определенным именем:
Удаление определенных типов файлов
Если в папке находятся файлы разных типов и вы хотите удалить все файлы с определенным расширением (например, .pdf, .ods или .doc), введите следующее после команды «rm»:
В этом случае все файлы с расширением .ods будут удалены.
Удалить все файлы в заданной папке
Если вы хотите удалить файлы и вложенные папки из определенной папки, введите в терминале следующую команду:
В этом случае будут удалены все файлы в папке «Папка», но не сама папка. Также можно удалить каталог Linux, включая все содержащиеся в нем файлы.
Ну вот и все, теперь вы можете удалить файл в терминале Linux.