Мне нужно найти все файлы, соответствующие определенным критериям, и удалить их - вот фрагмент:
/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 указанный путь удалит все каталоги и файлы