Удалить несколько файлов одновременно linux

Как быстро удалить Очень Много файлов?

Есть раздел под XFS. В нём директория. Выглядит так:

# ls -ldh .
drwxrwxrwx 2 user user 330M Aug 4 01:04

Т.е. только мета-инфа весит 330 Мб (верхняя планка, значит, 1,3-1,4 млн. файлов). Списка имён файлов нет.

Вопрос: как их быстро удалить, с минимальной утилизацией винтов (продакшн-сервер) и без потери остальных данных на этом разделе?

Re: Как быстро удалить Очень Много файлов?

rm -dfr /var/www или че там у тебя

Каждую неделю вопрос на ЛОРе.

Этого вопроса ещё нет в FAQ? (Мне лень смотреть)

find . -maxdepth 1 -type f | xargs -0 ls

Use ionice, Luke!

> Т.е. только мета-инфа весит 330 Мб

Неверно, но к делу отношения не имеет.

> Вопрос: как их быстро удалить,

rm -rf /path/to/dir

> с минимальной утилизацией винтов (продакшн-сервер)

echo cfq > /sys/block/[диск, где находится ФС]/queue/scheduler

ionice -c3 rm -rf /path/to/dir

P.S. Непонятно, чем они так помешали, что понадобилось их так срочно удалять.

Re: Как быстро удалить Очень Много файлов?

Спасибо. С -d всё хорошо.

До этого пробовал:
#find ./ -maxdepth 1 -type f -mtime +7 -exec rm -f <> \;
(не хотелось удалять всё), выглядело так:
——————
#strace -s 360 -p 25670
Process 25670 attached — interrupt to quit
getdents64(4, /* 73 entries */, 4096) = 4088
getdents64(4, /* 73 entries */, 4096) = 4088
getdents64(4, /* 73 entries */, 4096) = 4088
getdents64(4, /* 73 entries */, 4096) = 4088
getdents64(4, /* 73 entries */, 4096) = 4088
etdents64(4,
Process 25670 detached
——————
, т.е. видимо строило файл-лист и делало это больше недели, с обычным rm было так же (надо было кстати использование памяти замерить).
А с ionice -c3 rm -dfr dir так:
# strace -s 360 -p 933
——————
Process 933 attached — interrupt to quit
unlink(«4e2a0e62921574187660e5ea2155af7e») = 0
unlink(«6094ad144713c973537c162b9e52b5d5») = 0
unlink(«86287687383af5b9c880cd6d4dbaca1c») = 0
unlink(«a8c6a06559e542e396c01a28d6110bbc») = 0
unlink(«ce40f028183e656e1fb5039b8a06dc92») = 0
unlink(«6c66c8ac651afbcd9c3b6dd45a79d506») = 0
unlink(«0753b1f1fcadc9262f0705c897350846») = 0
unlink(«a76ec71296a85087c5e76c413c92e23b») = 0
unlink(«66d65eba60a15d3e44b4058c763dbe74») = 0
— SIGINT (Interrupt) @ 0 (0) —
Process 933 detached
——————

Источник

Как удалить файлы и каталоги с помощью командной строки Linux

How to Remove Files and Directories Using Linux Command Line

В этом руководстве мы покажем Вам, как использовать rm , unlink и rmdir команды для удаления файлов и каталогов в Linux.

Как удалить файлы

Чтобы удалить (или удалить) файл в Linux из командной строки, используйте команду rm (удалить) или unlink команду.

Команда unlink позволяет удалить только один файл, при этом rm вы можете удалить несколько файлов одновременно.

Читайте также:  Visual studio 2019 download windows

Будьте особенно осторожны при удалении файлов или каталогов, потому что, как только файл удален, он не может быть легко восстановлен.

Чтобы удалить один файл, используйте команду rm or, unlink а затем имя файла:

Если файл защищен от записи, вам будет предложено подтвердить, как показано ниже. Чтобы удалить тип файла y и нажмите Enter . В противном случае, если файл не защищен от записи, он будет удален без запроса.

Чтобы удалить несколько файлов одновременно, используйте rm команду, за которой следуют имена файлов, разделенные пробелом.

Вы также можете использовать подстановочный знак ( * ) и обычные расширения для сопоставления нескольких файлов. Например, чтобы удалить все .pdf файлы в текущем каталоге, используйте следующую команду:

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

Используйте опцию rm with -i для подтверждения каждого файла перед его удалением:

Чтобы удалить файлы без запроса, даже если файлы защищены от записи, передайте параметр -f (force) rm команде:

Вы также можете комбинировать rm варианты. Например, чтобы удалить все .txt файлы в текущем каталоге без запроса в подробном режиме, используйте следующую команду:

Как удалить каталоги (папки)

В Linux вы можете удалять / удалять каталоги с помощью rmdir и rm .

rmdir утилита командной строки для удаления пустых каталогов, в то время как rm вы можете рекурсивно удалять директории и их содержимое.

Чтобы удалить пустой каталог, используйте либо имя, rmdir либо rm -d имя каталога:

Чтобы удалить непустые каталоги и все файлы в них, используйте rm команду с параметром -r (рекурсивный):

Если каталог или файл в каталоге защищен от записи, вам будет предложено подтвердить удаление.

Чтобы удалить непустые каталоги и все файлы без запроса, используйте rm с -r (recursive) и -f параметрами:

Чтобы удалить несколько каталогов одновременно, используйте rm -r команду, за которой следуют имена каталогов, разделенные пробелом.

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

Вывод

Теперь вы должны иметь хорошее представление о том , как использовать Linux rm , rmdir и unlink команды , и вы должны иметь возможность безопасно удалить файлы и папки из командной строки.

Источник

Как удалить файлы и каталоги с помощью командной строки Linux

В этом руководстве мы покажем вам, как использовать команды rm , unlink и rmdir для удаления файлов и каталогов в Linux.

Как удалить файлы

Чтобы удалить (или удалить) файл в Linux из командной строки, используйте команду rm (remove) или unlink .

Команда unlink позволяет удалить только один файл, а с помощью rm вы можете удалить сразу несколько файлов.

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

Чтобы удалить один файл, используйте команду rm или unlink за которой следует имя файла:

Если файл защищен от записи, вам будет предложено подтвердить, как показано ниже. Чтобы удалить тип файла y и нажмите Enter . В противном случае, если файл не защищен от записи, он будет удален без запроса.

Читайте также:  Английский ввод по умолчанию windows 10

Чтобы удалить сразу несколько файлов, используйте команду rm после которой укажите имена файлов, разделенные пробелом.

Вы также можете использовать подстановочный знак ( * ) и обычные расширения для соответствия нескольким файлам. Например, чтобы удалить все файлы .pdf в текущем каталоге, используйте следующую команду:

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

Используйте rm с параметром -i для подтверждения каждого файла перед его удалением:

Чтобы удалить файлы без запроса, даже если файлы защищены от записи, передайте параметр -f (force) команде rm :

Вы также можете комбинировать параметры rm . Например, чтобы удалить все файлы .txt в текущем каталоге без запроса в подробном режиме, используйте следующую команду:

Как удалить каталоги (папки)

В Linux вы можете удалять / удалять каталоги с помощью rmdir и rm .

rmdir — это утилита командной строки для удаления пустых каталогов, а с помощью rm вы можете рекурсивно удалять каталоги и их содержимое.

Чтобы удалить пустой каталог, используйте rmdir или rm -d за которым следует имя каталога:

Чтобы удалить непустые каталоги и все файлы в них, используйте команду rm с параметром -r (рекурсивный):

Если каталог или файл в каталоге защищен от записи, вам будет предложено подтвердить удаление.

Чтобы удалить непустые каталоги и все файлы без запроса, используйте rm с параметрами -r (рекурсивный) и -f :

Чтобы удалить сразу несколько каталогов, используйте команду rm -r после которой укажите имена каталогов, разделенные пробелом.

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

Выводы

К настоящему времени вы должны хорошо понимать, как использовать команды Linux rm , rmdir и unlink и у вас должна быть возможность безопасно удалять файлы и каталоги из командной строки.

Источник

Удалить разом несколько файлов

Здравствуйте! Есть каталог, /opt/sof/bd/. В bd находится очень много файлов, требуется одним разом удалить все файлы с разрешением .txt и файлы в которых есть имя «abc» (abc01,abc02,abc03 и т.д.)

Здесь порылся нашел, что такое можно реализовать через команду find.

больше 1000 это херня: rm -f /opt/sof/bd/abc* /opt/sof/bd/*.txt

Если больше миллиона, то читай сюда: https://habr.com/post/157613/

Это развернёт шелл, в строку оно не влезет и пошлёт в задницу.

Оберни в кавычки, ибо * разворачивает шелл, и разворачивает скорее всего в ничего.

требуется одним разом удалить все файлы с разрешением .txt и файлы в которых есть имя «abc» (abc01,abc02,abc03 и т.д.)

про экранирование шаблонов уже подсказали

«-delete» в find чем не подходит ?

Эм, даже не в курсе)) Просто понадобилось вот удалить из базы, N-ое количество файлов))

А если нужно не удалить? А перенести, допустим «*.txt» в другой каталог?

Если надо не переносить, а именно удалять, у find есть даже специальный ключик для этого, -delete. Пожалуйста, посмотрите в эту сторону, т.к. при этом нагрузка меньше на систему, меньше процессов создается и тратится меньше памяти.

Тебя он пошлет в задницу.

Читайте также:  Windows forms open form button

разворот *.txt в набор файлов очень долгое и гиблое дело. может памяти не хватить.

чистил архивы тайловых карт

300 000 файлов в куче вложенных директорий общим весом под сотню гигов.

кстати до сих пор не понимаю почему все так упираются в мудрености «-exec rm <> \;» и «-print0 | xargs -0 rm -f» когда в самом find есть отличная опция

Ну так у него больше 1000, копейки.

Ничего не удаляет!

нафиг файнд для одного каталога?
cd /opt/sof/bd/
rm *abc*.txt
rm *.txt*
rm *abc*

Но вообще у меня /opt root:root То есть:

Может потому, что 1 команда проще, чем 4? )

я и так от рута

кстати до сих пор не понимаю почему все так упираются в мудрености «-exec rm <> \;» и «-print0 | xargs -0 rm -f» когда в самом find есть отличная опция -delete

Потому что в posix find нет -delete, но есть зато вместо точки с запятой плюсик, то есть запустит одной командой столько сколько возможно аргументов.

Потому что в posix find нет -delete, но есть зато вместо точки с запятой плюсик, то есть запустит одной командой столько сколько возможно аргументов.

Осталось лишь найти posix find, которого нет в самых популярных дистрибутивах.

Осталось лишь найти posix find, которого нет в самых популярных дистрибутивах.

Очень умно, ага. posix как стандарт определяет минимум, потому он у вас есть в популярных дистрибутивах.

Да, действительно удаляет только последнюю выборку. Был не прав.

Вот так будет работать:

Очень умно, ага. posix как стандарт определяет минимум, потому он у вас есть в популярных дистрибутивах.

И что? В большинстве дистров есть -delete, который работает проще и быстрее. Пользуются таким администраторы, которые явно не делают платформонезависимый софт.

Отсутствие -delete в стандарте лишь говорит о косности последнего.

отсутствие фич в станадрте лишь говорит о том что давно не выпускали новых версий стандартов 🙂

и это стандартнее стандартов 🙂

Да ни чо. Задали вопрос, я — ответил. delete — очень узкая задача, а знание -exec <> + — гораздо полезнее, так как позволяет запустить любую программу с максимальным количеством аргументов на любой posix-, а значить и unix-like системе, и в отличии от -print0 | xargs -0 — «работает проще и быстрее». Потому — знать это полезно, если б pfg этот вариант упомянул того комментария вообще от меня не было.

отсутствие фич в станадрте лишь говорит о том что давно не выпускали новых версий стандартов 🙂

Я посмотрел, последнее обновление 2017 год. Просто легче нарисовать новую циферку на обложке, чем добавить содержимое.

новые функции — новые проблемы (с) любой программист.

так что лучше не надо нового если работает комбинация из старого 🙂 каменный топор исправно служил человечеству на несколько порядков дольше чем все остальные инструменты вместе взятые.

Вот это верно подмечено:) работает не трогай)) Всем спасибо за ответы:)

Осталось выяснить какой find быстрее сделает с -delete или без него.

exec спавнит детей, логично предположить что быстрее без

Источник

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