Назад | Перейти на главную страницу

Удаление файлов в Linux

Мне нужно найти все файлы, соответствующие определенным критериям, и удалить их - вот фрагмент:

/var/www/somesite/releases/{many directories}/tmp/attachment_fu

Я бы хотел найти все файлы в любом tmp/attachment_fu каталог и удалите их - проблема в том, что {many directories} сбрасывает мой find навыки (или, может быть, find это неправильная команда - я тоже пробовал locate но безрезультатно).

Может быть я скучаю something but rm /var/www/somesite/releases/*/tmp/attachment_fu/* кажется то, что вы хотите. ls /var/www/somesite/releases/*/tmp/attachment_fu можно использовать, чтобы увидеть, что будет удалено

Я не совсем понимаю, что вы пытаетесь сделать - рекурсивно удалять файлы, соответствующие имени attachment_fu, но оставляя каталоги в покое?

Если да, попробуйте это (я добавил эхо, чтобы вы могли сначала протестировать его) ...

find /var/www/somesite/releases -type f -name attachment_fu -exec echo rm -f {} \;

Если нет, объясните подробнее :)

В качестве альтернативы вы можете использовать флаг -regex, чтобы узнать, важен ли / tmp /; что-то вроде...

find /var/www/somesite/releases -type f -regex '.*/tmp/attachment_fu$' -exec echo rm -f {} \;

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

ls / var / www / somesite / Release / * / tmp / attachment_fu | xargs rm -rf

что-то такое?

да, или rm -rf / var / www / somesite / Release / * / tmp / attachment_fu

;)

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

Самый безопасный способ - использовать расширение оболочки для получения списка каталогов, зацикливать их и использовать find для удаления файлов:

for d in $(ls /var/www/somesite/releases/*/tmp/attachment_fu)
do
  find $d -type f -exec rm {} \;
done

Это должно работать достаточно хорошо, конечно, не получится, если у вас огромное количество каталогов, но тогда у вас будут другие проблемы: P

rm -rf указанный путь удалит все каталоги и файлы