1

Мне нужно найти все файлы старше X дней и удалить их локально и из моей корзины s3. Проблема в том, что команда find возвращает мне полный путь и имя файла. Я попытался возиться с базовым именем и некоторыми другими вещами, но не смог заставить его работать. Любая помощь будет принята с благодарностью.

На данный момент часть «удалить их локально» - это ls вместо rm, пока я с ней играл. Для рм мне нужен полный путь.

Мне нужно удалить /home/ec2-user/ backups / из вызовов s3cmd.

$ find /home/ec2-user/backups -type f -mtime +3 -exec ls {} \; -exec s3cmd del s3://kisnardonline/{} \;

/home/ec2-user/backups/FILESYSTEM-2016-04-09_00-00.tar.gz
File s3://kisnardonline//home/ec2-user/backups/FILESYSTEM-2016-04-09_00-00.tar.gz deleted

2 ответа2

1

Есть несколько способов сделать это. Комбинация find -print0 и xargs -0 является мощной и безопасной для работы в сочетании с sed -z (используя NULL в качестве разделителя строк):

find /home/ec2-user/backups -type f -mtime +3 -print0 |\
  sed -z 's/^.*\?backups/s3:\//' |\
  xargs -0 -n 1 s3cmd del

Поскольку s3cmd (пока) не поддерживает удаление нескольких файлов, xargs требует -n 1 чтобы ограничить выполнение одной строкой за раз.

Другой способ, возможно, более простой, заключается в передаче find через read и использование подстановки переменных bash:

find /home/ec2-user/backups -type f -mtime +3 |\
  while read file; do s3cmd del ${file#*ups/}; done
0

Попробуйте эту простую модификацию:

cd /home/ec2-user/backups/; find -type f -mtime +3 -exec ls {} \; -exec s3cmd del s3://kisnardonline/{} \;

Таким образом, каждый путь, возвращаемый функцией find относится к /home/ec2-user/backups/ и начинается с ./ . Это будет работать, если s3cmd и / или s3 достаточно умен, чтобы интерпретировать ./ так, как должен (т.е. s3://foo/./bar равен s3://foo/bar и т.д.).

s3cmd не работает с./

В таком случае:

cd /home/ec2-user/backups/; find -type f -mtime +3 | while read F ; do ls "$F"; F="`echo $F | cut -c 3-`"; s3cmd del "s3://kisnardonline/$F"; done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .