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:

  1. type ls *.xvg to see a list of what files would be affected by this command.
  2. 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.

Читайте также:  Linux no such file or directory but file is there

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.

Источник

Удаление старых файлов Linux (старше N дней)

Удаление старых файлов в Linux является операцией необходимой для того чтобы не допустить заполнения диска. Обычно удалению подлежат однотипные старые файлы — логи, часто — файлы сессий РНР. Если система их ротирования, сжатия и удаления не настроена оптимально логи могут занимать значительное пространство, если же свободного места на сервере остается меньше 10% в его работе могут наблюдаться трудности.

Читайте также:  Kali linux alfa awus

Команды для удаления большого количества файлов

Удаление старых файлов linux по маске чаще всего осуществляется следующим образом:

Веб-сервер указан для примера. Синтаксис очень прост — команда принудительно удалит все файлы с расширением .log в указанном каталоге, при этом удаление будет рекурсивным(-r — recursive) и подтверждения система при этом спрашивать не будет (-f — force).

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

Если rm -rf не помогает — удалять файлы следует в цикле for. Для каждого файла будет отдельная операция удаления и никаких ограничений системы здесь ожидать не приходится.

Синтаксис в простейшем случае может выглядеть так:

for f in /var/log/apache2/*.log; do rm «$f»; done

В цикл for можно добавить любую дополнительную логику.

Удаление по Cron файлов старше N дней

Логи или другие файлы (сессии РНР) можно удалять как используя циклы (так приходится делать обычно если логов или других файлов накопилось действительно очень много).

Если система не запущена для большого количества пользователей или только создается лучше использовать регулярно выполняемое задание Cron, согласно которому с заданной периодичностью будут удаляться файлы определенных типов. При регулярном выполнении операции очень много файлов скопиться не успеет и цикл не потребуется.

# m h dom mon dow command

23 3 * * * find /var/www/site/www/var/session/ -type f -mtime 7 -exec rm -f <> \;

В примере удаляются сессии РНР для сайта (тип документа ‘файл’, время создания — больше 7 дней).

Как любое cron задание команду на удаление файлов можно проверить выполнив её вручную. При успешном выполнении вывода не будет:

Удаление старых файлов Linux

В цикле то же самое можно сделать так:

for f in /tmp/logs/*.log

find $f -mtime +7 -exec rm <> \;

Приведенное выражение, как и любой другой цикл можно поместить в файл, сделать его исполняемым и с тем же успехом выполнять по Cron

Источник

FAQ → Удаление файлов по маске в Linux

Это небольшая шпаргалка, возможно кому-то окажется полезной.
Недавно, меня озадачили вопросом, что после работы Word на файловой шаре в Samba, остаются, временные файлы, которые, по идее, должны «самоликвидироваться» после окончания работы в Word и Excel, но по непонятной причине, этого не происходит.
Собственно идея проста, как валенок, запускаем скрипт который сам обойдет все папки, т.е. рекурсивно, найдет все файлы по определенной маске и затем удалит их. Данный способ подходит для удаления различных типов файлов, по разными критериями, например можно удалять музыку или видео, которое, неразумные сотрудники закачивают в общие файловые ресурсы.
Собственно сабж.
Временные файлы MS Office имеют название ~$filename.doc (Word) и ~$filename.xslx (для Excel 2007/2010)
Предположим что файловая шара Samba находится у нас по адресу: /home/samba/public в которой уже лежат папки и файлы пользователей.
Тогда запрос принимает вид:

find /home/samba/public -type f -name "~$*.*" -delete

«~$*.*» -маска имени файла, если нужно удалить например: файлы mp3, то будет иметь вид «*.mp3», а если требуется удалять приложения, то «*.exe»
Данное задание можно засунуть в Cron и выполнять по ночам, когда сервер не используется.
Решение подходит для всех дистрибутивов Linux.

Читайте также:  Отчет об установке ос linux

0 комментариев

FAQ

Прямой эфир

  • Artful / Seafile собственный аналог Dropbox на Ubuntu 12 июля 2019, 14:21 | 90 комментариев
  • Artful / Журнал успешных входов пользователей в систему (Windows) и запись в MySQL(Linux) 23 декабря 2018, 19:03 | 18 комментариев
  • makioro / Настраиваем VPN сервер PPTP на Mikrotik RouterOS 23 сентября 2018, 12:54 | 8 комментариев
  • kvadim / Настройка DNS+DHCP сервера для локальной сети+динамическое обновление DNS зон, под управлением Ubuntu 12.04 19 сентября 2018, 10:25 | 290 комментариев
  • Artful / Настройка MikroTik RouterBoard RB951G-2HnD (MikroTik+L2TP Beeline) 17 июля 2018, 14:27 | 77 комментариев
  • korser / Настройка OpenVPN клиента на Windows 10 7 июля 2018, 12:40 | 18 комментариев
  • Artful / Настройка шлюза локальной сети, на базе Ubuntu 12.04 10 мая 2018, 21:03 | 177 комментариев
  • Artful / Настройка PXE Boot меню с мемтестом и паролями 10 мая 2018, 21:00 | 54 комментария
  • Artful / Изменение размера раздела Software RAID в Linux (mdadm resize) 19 апреля 2018, 20:15 | 5 комментариев
  • viking-warrior / Настраиваем VPN сервер L2TP и IPsec на Mikrotik RouterOS 21 марта 2018, 06:43 | 33 комментария
  • Artful / Настройка IPTV на MikroTik ( IPTV + MikroTik + Beeline ) 5 февраля 2018, 09:00 | 11 комментариев
  • Artful / Балансировка сетевой нагрузки с помощью Nginx под Ubuntu 5 февраля 2018, 08:54 | 14 комментариев
  • Artful / Настраиваем OpenVPN клиент Linux на примере Ubuntu 5 января 2018, 09:55 | 9 комментариев
  • Jar / Сборка deb пакета Nginx из исходных кодов с добавлением сторонних модулей 31 декабря 2017, 12:21 | 1 комментарий
  • pinuskabesr / Настройка DNS-сервера BIND Master & Slave, с автоматической репликацией данных между серверами 21 декабря 2017, 20:47 | 10 комментариев

Источник

Оцените статью
Adblock
detector