Voici mon problème:

J'ai un dossier appelé archive qui contient de nombreux sous-répertoires et fichiers au format suivant :

/home/user/archive/$YYYY/$MM/$DD

Je voudrais copier des fichiers spécifiques dans /tmp tout en conservant une partie de l'arborescence des répertoires. Jusqu'à présent, j'ai trouvé

find /home/user/archive -mtime +1 -type f -exec cp --parents {} /tmp;

(la partie find ... -mtime +1 -type f renvoie en fait ce que je veux copier)

Cependant, la sortie est au format /tmp/home/user/archive/$YYYY/$MM/$DD alors que mon format de sortie souhaité est /tmp/archive/$YYYY/$MM/$DD

Des solutions? :)

1
ELH_ 12 nov. 2020 à 13:29

1 réponse

Meilleure réponse

Une option serait d'exécuter la copie via la fonction système d'awk après avoir analysé la sortie de find. Une telle solution nécessiterait cependant que les structures de répertoire/sous-répertoire soient les mêmes dans tous les cas :

find /home/user/archive -mtime +1 -type f | awk -F\/ '{ print "mkdir -p /tmp/"$4"/"$5"/"$6";cp --parents "$0 " /tmp/"$4"/"$5"/"$6"/"$7 }'

Cela imprimera la commande de copie que vous devez exécuter pour chaque entrée trouvée à partir de la commande find. Assurez-vous que les commandes s'impriment comme prévu (cette étape est très importante)

Une fois que vous avez vérifié que les commandes s'affichent comme prévu, vous pouvez exécuter les commandes de copie réelles via la fonction système d'awk :

find /home/user/archive -mtime +1 -type f | awk -F\/ '{ system("mkdir -p /tmp/"$4"/"$5"/"$6";cp --parents "$0 " /tmp/"$4"/"$5"/"$6"/"$7) }'
0
Raman Sailopal 13 nov. 2020 à 08:59