2 Stimmen

BASH rekursive Suche nach Dateinamen und Kopieren nach ftp

Ich arbeite an einem Bash-Skript (siehe unten), das Verzeichnisse auf einem SAN rekursiv nach Dateien mit einem bestimmten Dateinamen durchsucht, der neuer als 4 Stunden ist. Dann kopiert es alle diese Dateien an einen bestimmten FTP-Speicherort und sendet eine E-Mail, dass die Kopie abgeschlossen ist. Das Skript funktioniert einwandfrei, kopiert aber nur Dateien auf der obersten Verzeichnisebene. Die Fehlermeldung, die ich in den unteren Verzeichnissen erhalte, lautet wie folgt:

#

remote: -v
ftp: local: -v: No such file or directory
local: ./Test01/test02/folder02_01_1200_m30.mp4 remote: ./Test01/test02/folder02_01_1200_m30.mp4
229 Entering Extended Passive Mode (|||45127|)
550 ./Test01/test02/folder02_01_1200_m30.mp4: File does not exist. (2)
221 Goodbye.

#

Hier ist das Skript

#!/bin/bash
#The location from where the script should search
GSPORIGIN='/Volumes/folder01/folder02'

#File Names to be moved
FILE1='*1200_m30.mp4'

#FTP Details
HOST='xxxx.upload.com'
USER='xxxxxxx'
PASSWD='xxxxxxxxxxxx'
#the destination directory on the FTP
DESTDIR="/8619/_!/TEST"

# Go to the location from where the search should start 
cd $GSPORIGIN
for file in `find . -type f -name "*1200_m30.mp4" -mmin -240`
do 
echo $file
if [ -f $file ] ; then
ftp -n -v $HOST << EOT
ascii
user $USER $PASSWD
prompt
cd $DESTDIR
mput -v $file
EOT
echo "$file has been copied to FTP" | mail -s "$file has been copied to FTP in Directory $DESTDIR"  xxx.xxx@xxx.com; 
else exit 1
fi
done

2voto

Cédric Julien Punkte 74976

Um das zu tun, was Sie gerade tun, müssen Sie die Verzeichnisse auf dem Ziel-FTP neu erstellen. Verwenden Sie die Befehle basename/dirname und einen mkdir-Befehl wie diesen:

for file in `find . -type f -name "*1200_m30.mp4" -mmin -240`
do 
echo $file
if [ -f $file ] ; then

destdirname=`dirname "$file"`

ftp -n -v $HOST << EOT
ascii
user $USER $PASSWD
prompt
cd $DESTDIR
mkdir $destdirname 
mput -v $file
EOT
echo "$file has been copied to FTP" | mail -s "$file has been copied to FTP in Directory $DESTDIR"  xxx.xxx@xxx.com; 
else exit 1
fi

2voto

anubhava Punkte 713155

Um mehrere Dateien in verschachtelte Verzeichnisse zu kopieren: Ich würde vorschlagen, dass Sie sich folgendes ansehen rsync-Dienstprogramm um diese Aufgabe für Sie zu erledigen.

rsync erstellt bei Bedarf alle entfernten Verzeichnisse und hält die Dateien auch nach häufigen Durchläufen vollständig synchronisiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X