Сегодня я столкнулся с той же проблемой, и ответ Эрика кажется наиболее точным. Вероятно, проблема в том, что у вас разные версии postgresql-client, а pg_dump просто использует самый старый клиент.
Вы можете решить эту проблему, используя полный путь, как он описал, но я нашел более простое решение - удалить пакет postgresql-client-common (который удаляет всех клиентов), а затем переустановить postgresql-client-9.3. Это оставляет вам только последние версии pg_dump, которые, вероятно, вам нужны.
find
имеет действие fprint
, которое может записывать результаты команды find в файл. Затем вы можете расширить свою команду как:
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -fprint /path/to/log.txt -delete
Затем вы можете получить количество файлов из файла журнала, используяwc
:
cat /path/to/log.txt | wc -l
Если в результатах поиска могут появляться специальные символы, в качестве альтернативы можно использовать опцию fprint0
. Это запишет результаты в указанный файл в виде строк с нулевыми разделителями -.
Чтобы подсчитать элементы в результирующем файле, вы можете просмотреть параметры, обсуждаемые в этом вопросе.:Подсчитать элементы с нулевым разделителем в файле .
Вы можете использовать параметр -print
для find
для вывода удаленных файлов, а затем направить их в tee
для записи результатов в файл журнала. И, наконец, подсчитайте строки удаленных файлов и добавьте их в лог-файл.
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -delete -print | tee ${LOGFILE} | wc -l | xargs echo "Files deleted:" >> ${LOGFILE}
Если вы хотите добавить новые результаты к тому же ${LOGFILE}
, вам придется использовать tee -a
.
Вы можете использовать приведенную ниже команду для достижения того же
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -exec rm -rvf {} \; >log_file ===> This will delete and writes to logfile which are the files getting deleted
wc -l log_file===> will display count of files which are deleted
Если у вас могут быть имена файлов с символами новой строки в них(touch /the/path/$'foo\nbar'
для создания примера ), вы можете избежать некоторой путаницы, используя функцию GNU find -fprintf
для печати имен файлов в один файл журнала и точку для каждого имени файла. в отдельный лог-файл. Тогда количество байтов в точечном файле будет равно количеству совпадающих файлов, а сами имена файлов будут в отдельном файле.
find "$backup_path"/"$HOSTNAME".*.img -mtime +"$retention_days" -type f \
-fprintf./deleted-files '%p\n' \
-fprintf./count-files '.' \
-delete
Выше я специально поместил два оператора -fprintf
после предыдущих критериев фильтрации -mtime
и -type f
и непосредственно перед -delete
, чтобы они срабатывали только тогда, когда -delete
должен быть.
Первый новый оператор печатает пути к файлу ./deleted-files
; второй печатает точку на ./count-files
. Вы можете просмотреть журнал удаленных файлов -для поиска имен удаленных файлов и использовать wc -c < count-files
для отчета об общем количестве удаленных файлов. Имена файлов перезаписываются -fprintf
при каждом запуске.