Shell 用于查找、删除和打印已删除文件的脚本

Shell script to Find ,Remove and print files removed

我正在创建一个脚本来维护应该只保留文件 7 天的数据库备份目录。

这是我创造的

set +vx
BACKUP_DIR=/mounts/prd
myarray=(`cat /u01/postgres_prod_server.txt`)

for SERVER in "${myarray[@]}"
do
   echo "   SERVER: $SERVER"
   if [ -d $BACKUP_DIR/$SERVER ]; then
      find $BACKUP_DIR/$SERVER/5431/ -type f -name '*.tar' -mtime +7 -exec rm -rf {} \; | tee /tmp/log.txt | wc -l | xargs echo "Files deleted:" >> /tmp/log.txt;
      find $BACKUP_DIR/$SERVER/5432/ -type f -name '*.tar' -mtime +7 -exec rm -rf {} \; | tee /tmp/log1.txt | wc -l | xargs echo "Files deleted:" >> /tmp/log1.txt;
   fi

done

这是我想要做的,但它不起作用。

1.i无法打印查找命令正在删除的内容并发送到日志文件。

-exec 不会打印任何内容,但您可以使用 -print 选项来执行此操作。参见 https://unix.stackexchange.com/a/503530/527050

此外,...| tee /tmp/log.txt 将截断日志文件,因此您需要添加选项 -a 以保留以前的日志。

最终脚本如下所示:(日志文件的路径被使用了两次,因此您可能希望将其存储在变量中。)

LOG_FILE=/tmp/log.txt
SEARCH_DIR="$BACKUP_DIR/$SERVER/5431/"

find "${SEARCH_DIR}" -type f -name '*.tar' -mtime +7 \
  -exec rm -rf {} \; -print | \
  tee -a "${LOG_FILE}" | \
  wc -l | \
  xargs echo "Files deleted:" >> "${LOG_FILE}";