четверг, 6 ноября 2008 г.

Linux: Удалить файлы рекурсивно

Казалось бы, простая задачка. В Windows все просто - del /S smth.*, готово. Все файлы по маске smth.* в текущей директории и ниже будут удалены.

В Linux чуток сложнее.
Есть в Linux команда rm, но она дальше текущей директории не идет, зато прекрасно понимает полный путь к файлу, чем мы и воспользуемся.
Получить список всех файлов в текущей директории и поддиректориях по маске позволяет команда find -name "smth.*", ее вывод то нам и нужен. Осталось его перенаправить на вход команды rm. Это можно сделать 5ю способами:
xargs - формирует команду rm с аргументами считанными из стандартного ввода на которой мы подадим вывод команды find. нюансы использования описаны тут
1. find /path/to/dir -type f -name 'smth*' -print0 | xargs -0 rm;
exec - перенапаравляем вывод команды find на вход команды rm
2. find -name 'smth.*' -exec rm {} \;
UPD.
find - самый рульный способ
3. find -name 'smth.*' -delete;
UPD.
Способы подсказанные камрадом goodvin
4. find . -type f -name 'smth*' -delete
5. find . -type f -name 'smth' -exec rm -f -- "{}" \;

Может есть ещё какие нибудь способы??

2 комментария:

Анонимный комментирует...

rm -R ы?

eye-ru комментирует...

листинг как эта команда отработает в студию. А пока эта команда не работает так как нужно!