Comment déplacer des fichiers d’un chemin vers un autre chemin dans unix en utilisant un script shell

Je veux déplacer les fichiers journaux d’un chemin (chemin source) vers un autre chemin (chemin de destination). Ce chemin source et le chemin de destination sont présents dans un fichier texte. comme::

source_path=abc/xyz source_path=pqr/abc desination_path=abcd/mlk 

donc j’ai lu ce fichier et les chemins stockés dans différentes variables.J’ai plusieurs chemins de source, donc je les ai stockés dans une variable qui agit comme un tableau. comme ci-dessous ::

 sourcePaths=`grep source_path myfile |cut -d= -f2` destPath=`grep destination_path myfile |cut -d= -f2` 

et je n’ai qu’un seul chemin de destination où je veux déplacer tous ces fichiers. Maintenant, je veux parcourir tout ce chemin source, trouver le fichier de journaux avec une extension spécifique, compresser tous ces fichiers et passer au chemin de destination. J’utilise la boucle pour récupérer les données de la variable sourcePaths (ceci est juste un essai). comme:;

 for i in $sourcePaths do echo $i done 

Est-ce que quelqu’un peut m’aider dans cela?

Merci beaucoup pour votre réponse Guys.Now, je veux append un filtre à cela. Je veux déplacer les fichiers du chemin source qui ont 10 jours et je veux supprimer ces fichiers du chemin source après le déplacement. S’il vous plaît aider

Juste une question de plus !! Que faire si je veux stocker ce fichier zip avec le nom qui contient l’horodatage, afin qu’il n’y ait pas de duplication du nom de fichier sur le chemin de destination.

Salut à tous, encore une question.Quand je zippe le fichier avec l’option ci-dessus, il crée un sous-dossier dans un fichier zip en fonction de son path.ie. Si je zippe les fichiers journaux de src / int / xlog / abc, et quand je décompresse ce fichier zip, le contenu du fichier zip nouvellement créé enregistre les fichiers dans src / int / xlog / abc / abc.zip. Je ne veux pas ceci.ce que je veux est que ce fichier zip directement contenu abc.zip. Pas dans le sous-dossier.

Salut les gars, je suis de retour avec une autre question.Si vous utilisez le script ci-dessous, je suis en mesure de créer le nom du fichier zip comme base pathname.egxyz.zip et abc.zip selon mon chemin ci-dessus en utilisant le code ci-dessous:

 timestamp=`date +%Y%m%d_%H%M%S` zipFile=$destPath/$(basename $sourcePath).$timestamp.zip 

Mais maintenant, je veux créer ce nom de fichier (ie nom de fichier Zip) plus spécifique dépend de son chemin source.Comme si mon contenu de fichier texte

 source_path=obj/imp/backup/logs/db1 source_path=obj/res/input/int/db2 desination_path=abcd/mlk 

Maintenant, je veux créer un nom de fichier zip quelque chose comme ça.

 backup_logs_db1.zip input_int_db2.zip 

signifie que je veux utiliser les trois derniers noms de répertoire pour créer un nouveau nom de fichier zip. Il est fourni que le chemin source dans le contenu du fichier texte comporte plus de trois noms de répertoire.

Alors, est-ce que n’importe qui peut m’aider? Thnaks en avance !!!

Pour créer des archives ZIP, vous pouvez le faire:

 for sourcePath in $sourcePaths do zipFile=$destPath/$(basename $sourcePath).zip find $sourcePath -type f -name "*.log" | xargs zip $zipFile -@ done 

qui va créer

abcd/mlk/xyz.zip (contenant tous les fichiers * .log sous abc / xyz) et
abcd/mlk/abc.zip (contenant tous les fichiers * .log sous pqr / abc)

Pour créer des archives GZIPped, vous pouvez:

 for sourcePath in $sourcePaths do tarFile=$destPath/$(basename $sourcePath).tar find $sourcePath -type f -name "*.log" -exec tar -uvf $tarFile {} \; gzip $tarFile done 

qui va créer:

abcd/mlk/xyz.tar.gz (contenant tous les fichiers * .log sous abc / xyz)
abcd/mlk/abc.tar.gz (contenant tous les fichiers * .log sous pqr / abc)


Pour déplacer les fichiers de la source vers la destination, qui n’ont pas été modifiés au cours des 10 derniers jours, vous pouvez utiliser ceci:

 for sourcePath in $sourcePaths do find $sourcePath -type f -mtime +10 -name "*.log" -exec mv {} $destPath \; done 

Si vous souhaitez supprimer les fichiers d’entrée après la compression, procédez comme suit:

 for sourcePath in $sourcePaths do zipFile=$destPath/$(basename $sourcePath).zip find $sourcePath -type f -mtime +10 -name "*.log" | xargs zip -mT $zipFile -@ done 

Utilisez la commande date pour générer un horodatage. Les drapeaux sont:

 %Y is the year %m is the month %d is the day %H is the hour %M are the minutes %S are the seconds 

Ajoutez l’horodatage au nom du fichier zip, cela devient:

 for sourcePath in $sourcePaths do timestamp=`date +%Y%m%d_%H%M%S` zipFile=$destPath/$(basename $sourcePath).$timestamp.zip find $sourcePath -type f -mtime +10 -name "*.log" | xargs zip -mT $zipFile -@ done 

Utilisez l’indicateur -j zip pour stocker uniquement le nom de fichier sans le nom du répertoire. La nouvelle commande sera:

 for sourcePath in $sourcePaths do timestamp=`date +%Y%m%d_%H%M%S` zipFile=$destPath/$(basename $sourcePath).$timestamp.zip find $sourcePath -type f -mtime +10 -name "*.log" | xargs zip -jmT $zipFile -@ done 

Ce qui suit va parcourir tous les chemins source, créer un fichier tar.gz dans $ destPath. Ce fichier .tar.gz contient un dossier nommé $sourcePath contenant les fichiers journaux (fichiers avec l’extension .log).
Le nom du fichier .tar.gz sera basé sur le nom de base de $ sourcePath, abc/xyz dans un fichier xyz.tar.gz à créer.

 for sourcePath in $sourcePaths;do name=`basename $sourcePath` tar czf "$destPath/$name.tar.gz" $sourcePath/*.log done 

Remarque: votre source_path ne doit pas contenir d’espaces ni de tabulations, les fichiers journaux ne font pas l’object d’une recherche récursive.