【问题标题】:Bash script - delete old filesBash 脚本 - 删除旧文件
【发布时间】:2021-01-17 21:48:06
【问题描述】:

我有一个将压缩文件上传到 ftp 的脚本,它是我在下面显示的代码。

此代码可以正常工作,但我想对其进行调整,以便在文件上传后,它会删除一周前的 ftp 文件

#!/bin/sh
HOST='xxx'
USER='xxx'
PASSWD='xxx'
DAY=`date +"%d%m%Y_%H%M"`

cd /temp
rm -fr backup
mkdir backup
cd backup

 
export GZIP=-9
tar -czvf $DAY-backup.tar.gz  --exclude="*/node_modules/*" /var/www/html/cars


FILE=$DAY-backup.tar.gz

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
binary
put $FILE
quit
END_SCRIPT
exit 0

【问题讨论】:

标签: linux bash shell scripting debian


【解决方案1】:

一种选择是使用查找命令来捕获超过 7 天的文件并将其删除。 所以它给出了这样的东西:

find . -type f -name ".*-backup.tar.gz" -mtime +7 -exec rm {} \;

您可以在脚本中添加这一行 如果您想先测试删除,请通过 print 替换 exec 部分以显示捕获的文件:

find . -type f -name ".*-backup.tar.gz" -mtime +7 -print

【讨论】:

  • -exec rm {} \; 的两个替代方案是:1) -exec rm {} + 发出一个rm,而不是每个文件生成一个。 2) 使用-delete 而不是-exec ...。不过,这些选项可能并非在所有地方都可用。
【解决方案2】:

你可以试试这个解决方案:

# Purpose: This step is used to Purge 7 days old files
export PROJECT_LOG="${PROJECT_HOME}/log";
export APP_MAINT_LOG="APP.log"
export LOG_RETAIN_DUR=7
echo "Maintenance Job Started" > "${APP_MAINT_LOG}"
echo "=========================================================================" >> "${APP_MAINT_LOG}"
echo "${LOG_RETAIN_DUR} Day(s) Old Log Files..." >> "${APP_MAINT_LOG}"
echo "=========================================================================" >> "${APP_MAINT_LOG}"
find "${PROJECT_LOG}" -mtime +"${LOG_RETAIN_DUR}" -type f -exec ls -1 {} \; >> "${APP_MAINT_LOG}"
#find "${PROJECT_LOG}" -mtime +"${LOG_RETAIN_DUR}" -type f -exec rm -rf {} \;
echo "=========================================================================" >> "${APP_MAINT_LOG}"
echo "Maintenance Job Completed" >> "${APP_MAINT_LOG}"
cat "${APP_MAINT_LOG}"

注意:我已经注释掉了Remove file这一行,方便大家查看运行!

【讨论】:

  • 如果这个例子没有用,请告诉我,以便我删除我的帖子!
  • 感谢您的回答,我需要从 ftp 中删除超过 7 天的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 2014-10-28
  • 2016-11-22
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
相关资源
最近更新 更多