LINUX.ORG.RU

Поиск в подкаталогах по маске


0

0

Проблема в следующем. Мне нужно просканировать каталог который содержит десятки подкаталогов и найти в нем файлы с расширением .db удалив их. Я делаю следующее $rm `find mycatalog -name ".db"` однако - эта команда действительна если каталоги и файлы имеют имя в одну строку латиницей. Если же файл ил каталог или файл имеет имя например "мои документы" то эта команда не пашет (нужно эскейпить) как все это дело реализовать командой. Подскажите пожалуйста как задать команду чтоб все автоматически эскейпилость независимо от имени?

   ACTIONS
       -delete
              Delete  files; true if removal succeeded.  If the removal failed,
              an error message is issued.  Use  of  this  action  automatically
              turns on the ’-depth’ option.

sin_a ★★★★★
()

Нинада ничо эскейпить. Пользуйся ключем -exec. В твоем случае команда будет выглядеть так

find mycatalog -name ".db" -exec rm -f {} \;

где вместо "{}" будет подставляться имя текущего найденного файла. А конструкция "\;" нужна как терминирующий символ чтоб дальше парсинг команды не шел.

xintrea
()

find /the/path -type f -name '*.db' -print0 | \
xargs --null --no-run-if-empty rm -f

Dselect ★★★
()
Ответ на: комментарий от xintrea

> find mycatalog -name ".db" -exec rm -f {} \;

На каждый файл процесс порождать некультурно. Даже несмотря на то, что fork()
в Linux очень быстрый.

Dselect ★★★
()
Ответ на: комментарий от Dselect

> На каждый файл процесс порождать некультурно. Даже несмотря на то, что fork() в Linux очень быстрый.

Да и побоку, зато синтаксис команды более-менее понятен, не то что костыль xargs.

xintrea
()
Ответ на: комментарий от Dselect

> На каждый файл процесс порождать некультурно.

А культурно использовать внутренние средства команды find?

sin_a ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.