0

I found the following LFTP Script to Download Files. The script will fit, but currently it deletes the files after successful transfer. But I want the files to be moved to another directory (e.g. backup) on the remote server after the transfer. I searched but did not find a parameter for the mmv command.

Can someone tell me how to do this?

Thanks.

1
  • I don't see anywhere in that script where anything is deleted. mmv is the right command to use to move the remote files afterwards; what exactly have you tried and what happened instead of what you wanted?
    – frabjous
    Commented Mar 18, 2022 at 23:41

1 Answer 1

1

0. Manual of mget

lftp :~> ? mget

  • -c continue, resume transfer
  • -d create directories the same as in file names and get the
    files into them instead of current directory
  • -E delete remote files after successful transfer
    ....

1. DELETED REMOTE FILE

The problem of deleted remoted file at option -E :

mget -E $REGEX change it to mget $REGEX

2. MOVE FILE

mv command to rename file

mmv command to move file

If there problem with moving, it usualy because credentials,
like fileA.txt (made by userA), Folder_Backup_B(made by userB),
but you move fileA.txt to Folder_Backup_B and get mmv: Access failed: 550 Rename failed.
mmv need same user (or power user like root) that create / copy / move

In my test I have Directory :
Remote Directory

  • /home/tyacode/test_ftp #REMOTE_DIR
  • /home/tyacode/backup #REMOTE_BACKUP_DIR

When use lftp, I can't access backup folder from source /home, So I modify variable :

REMOTE_DIR="/home/tyacode/test_ftp/"
REMOTE_BACKUP_DIR="../backup/"

Maybe different scenario if you use hosting ftp


3. MODIFIED SCRIPT

#!/bin/bash
PROTOCOL="ftp"
URL="server.example.com"
USER="user"
PASS="password"
REGEX="*.txt"
LOG="/home/user/downloads/script.log"
LOCAL_DIR="/home/user/downloads"
REMOTE_DIR="dir/remote/server/file_directory"
REMOTE_BACKUP_DIR="dir/remote/server/backup_directory"

cd $LOCAL_DIR
if [  ! $? -eq 0 ]; then
    echo "$(date "+%d/%m/%Y-%T") Cant cd to $LOCAL_DIR. Please make sure this local directory is valid" >> $LOG
fi

lftp  $PROTOCOL://$URL <<- DOWNLOAD
    user $USER "$PASS"
    cd $REMOTE_DIR
    mget $REGEX
    mmv $REGEX $REMOTE_BACKUP_DIR 
DOWNLOAD

if [ ! $? -eq 0 ]; then
    echo "$(date "+%d/%m/%Y-%T") Cant download files. Make sure the credentials and server information are correct" >> $LOG
fi

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .