2 votes

BASH recursive find filename and copy to ftp (recherche récursive du nom de fichier et copie vers ftp)

Je travaille sur un script Bash script (voir ci-dessous) qui recherche de manière récursive dans les répertoires d'un SAN les fichiers dont le nom est plus récent que 4 heures. Il copie ensuite tous ces fichiers vers un emplacement FTP spécifique et envoie un courrier électronique pour indiquer que la copie a été effectuée. Le script script fonctionne bien sauf qu'il ne copie que les fichiers du répertoire de premier niveau. L'erreur que j'obtiens pour les répertoires inférieurs est la suivante :

#

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.

#

Voici le script.

#!/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 Points 24177

Pour faire ce que vous faites, vous devez recréer les répertoires sur le FTP de destination. Utilisez les commandes basename/dirname et une commande mkdir comme celle-ci :

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 Points 172509

Pour copier plusieurs fichiers dans des répertoires imbriqués : Je vous suggère de consulter utilitaire rsync pour faire ce travail à votre place.

rsync créera tous les répertoires distants chaque fois que nécessaire et gardera les fichiers complètement synchronisés même après de nombreuses exécutions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X