我尝试创建一个脚本,该脚本使用lftp删除备份目录上的三个旧文件,但删除所有旧文件。
我尝试用ls -1tr
进行此操作,这些人按升序返回所有文件,然后在执行head -$NB_BACKUP_TO_RM
($ NB_BACKUP_TO_RM是我要在列表中删除的文件数)之后,这两个命令返回正确的文件。
此后我想删除所有它们,所以我执行xargs rm --
,但是Bash返回文件不存在...我认为此命令不是运行到远程目录中,而是运行在本地目录中,而且我不知道该如何删除(返回列表中的)此文件。
这里是完整代码:
MAX_BACKUP=3
NB_BACKUP=$(lftp -e "ls -1tr $REMOTE_DIR/full_backup_ftp* | wc -l ; quit" -u $USER,$PASSWORD $HOST)
if (( $NB_BACKUP > $MAX_BACKUP ))
then
NB_BACKUP_TO_RM=$(($NB_BACKUP-$MAX_BACKUP))
REMOVE=$(lftp -e "ls -1tr $REMOTE_DIR/full_backup_ftp* | head -$NB_BACKUP_TO_RM | xargs rm -- ; quit" -u $USER,$PASSWORD $HOST)
echo $REMOVE
fi
您对这个问题有想法吗?如何删除列表中的文件(在ls -1tr $REMOTE_DIR/full_backup_ftp*
和head -$NB_BACKUP_TO_RM
之后)
感谢您的帮助
在man lftp
之后,对于lftp,看起来xargs是未知的cmd。 xargs rm
正在删除本地文件而不是远程文件。
所以请按如下所示使用xargs,它对我有用。
lftp -e "ls -1tr $REMOTE_DIR/full_backup_ftp*; quit" -u $USER,$PASSWORD $HOST | head -$NB_BACKUP_TO_RM | xargs -I {} lftp -e 'rm '{}'; quit' -u $USER,$PASSWORD $HOST