Menu

Commande FIND et deplacement de fichiers [Fermé]

Messages postés
558
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
19 juin 2019
-
Bonjour,

Voila je lance depuis un répertoire qui contient des sous répertoires la commande qui suit pour récupérer les fichiers portant un nom bien particuliers dans tous les sous dossiers .

find . -type f -ctime +712 -name 'psql_*'


Ce qui donne comme résultat :

./648/psql_1_0.jpg
./648/psql_1_3.jpg
./648/psql_1_125.jpg
./2145/psql_1_455.jpg
./2145/psql_1_12835.jpg
./27/psql_1_0.jpg
./27/psql_1_123565.jpg
./27/psql_1_9.jpg
./27/psql_1_12.jpg
./102/psql_1_7.jpg
./102/psql_1_56423.jpg
etc..


Je souhaiterais via xarg ou autre pouvoir déplacer ses fichiers dans les répertoires correspondants sur un autre disque. si le répertoire existe déjà juste déplacer les fichiers et si le répertoire n'existe pas déplacer ou créer le répertoire et déplacer les fichiers dedans.

Merci pour l'aide





L'accès au savoir est la première liberté que chaque homme devrait avoir.
Afficher la suite 

4 réponses

Messages postés
167974
Date d'inscription
mercredi 17 mai 2006
Statut
Modérateur, Contributeur sécurité
Dernière intervention
22 juillet 2019
16375
0
Merci
Salut,

Pas besoin de xargs (mais ça marcherait oui), tu peux le faire comme ceci :

find . -type f -ctime +712 -name 'psql_*' -exec mv {} /tmp/ \;


-exec permet d'exécuter une commande avec le paramètre {} qui est le résultat de ta recherche find

test avant bien sûr.

Veuillez appuyer sur une touche pour continuer la désinfection...
Malekal_morte-
Messages postés
167974
Date d'inscription
mercredi 17 mai 2006
Statut
Modérateur, Contributeur sécurité
Dernière intervention
22 juillet 2019
16375 > pcsystemd
Messages postés
558
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
19 juin 2019
-
ha oui j'avais mal lu, ce find permet de copier et supprimer les fichiers copier en gardant l'arborescence dans le dossier /tmp/test :

find -name "*psql*" -exec cp --parents {} /tmp/test \; -exec rm -f {} \;


c'est le paramètre --parents qui permet de copier avec l'arborescence complète.

Tu peux aussi faire un find pour construire un fichier tar.gz
et le détarer dans le répertoire voulu en gardant l'arborescence.
et après faire un find qui supprime tout.
L'avantage c'est que ça fait une sauvegarde en cas d'erreur.

Après c'est possible de lancer un find avec un sh -c pour lancer plusieurs commandes, mais je pense que la copie + suppression, c'est le plus simple, si tu as assez de place disque.

Peut-être que zipe aura une autre idée.
zipe31
Messages postés
36636
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 juillet 2019
3724 > Malekal_morte-
Messages postés
167974
Date d'inscription
mercredi 17 mai 2006
Statut
Modérateur, Contributeur sécurité
Dernière intervention
22 juillet 2019
-
Peut-être que zipe aura une autre idée.
Ben j'étais parti sur le
-exec cp --parents
+ un
-exec rm
ou
-delete
de find.

Puis j'ai jeté un oeil aux options de
rsync
, d'où ma question ;-)

Un truc du style :

find . -type f -name '*.png' -exec rsync -avR --remove-source-files {} ../rep2/ \;
Malekal_morte-
Messages postés
167974
Date d'inscription
mercredi 17 mai 2006
Statut
Modérateur, Contributeur sécurité
Dernière intervention
22 juillet 2019
16375 > zipe31
Messages postés
36636
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 juillet 2019
-
oui mais doit falloir un serveur rync qui tourne non ?

En plus, je crois que les includes de rsync prennent les wildcard, du coup, on doit pouvoir se passer de find ?
genre :

--include '*psql*jpg' --exclude '*'
zipe31
Messages postés
36636
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 juillet 2019
3724 > Malekal_morte-
Messages postés
167974
Date d'inscription
mercredi 17 mai 2006
Statut
Modérateur, Contributeur sécurité
Dernière intervention
22 juillet 2019
-
oui mais doit falloir un serveur rync qui tourne non ?
Non, ce n'est pas nécessaire.
on doit pouvoir se passer de find ?
Non plus, car la date (
-ctime +712
) entre en ligne de compte ;-\
Malekal_morte-
Messages postés
167974
Date d'inscription
mercredi 17 mai 2006
Statut
Modérateur, Contributeur sécurité
Dernière intervention
22 juillet 2019
16375 > zipe31
Messages postés
36636
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 juillet 2019
-
ha oui j'ai zappé la date :)
Messages postés
36636
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 juillet 2019
3724
0
Merci
Salut,
pouvoir déplacer ses fichiers dans les répertoires correspondants sur un autre disque. si le répertoire existe déjà juste déplacer les fichiers et si le répertoire n'existe pas déplacer ou créer le répertoire et déplacer les fichiers dedans.
Tu veux déplacer les fichiers (et leur répertoire), pas seulement les copier ?

Donc après ça ils n'existeront plus côté source ?


Messages postés
558
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
19 juin 2019
16
0
Merci
Merci a vous deux.

Oui je veux déplacer et que cote source ils n’existent plus. En effet nous commençons a avoir un problème de place sur le disque ou ils sont actuellement.

Donc si je résume la commande complete ce serait :

find . -type f -name '*.png' -ctime +712 --exec rsync -avR --remove-source-files {} ../rep2/ \;

zipe31
Messages postés
36636
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 juillet 2019
3724 -
../rep2/
Ça c'est mon répertoire de destination, à adapter de ton côté.

Adapte aussi le
-name
;-)

Sinon la commande
rsync
a aussi une option
--dry-run
qui montre ce que fait la syntaxe sans l'exécuter réellement. À tester même si ça risque d'être un peut trop verbeux dans ton cas.
zipe31
Messages postés
36636
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 juillet 2019
3724 -
Attention toutefois !!!

Extrait du
 man rsync
:

Note that you should only use this option on source files that are quiescent.  If you are using this to move  files  that  show  up in a particular directory over to another host, make sure that the finished files get renamed into the source directory, not directly written into it, so that rsync can’t possibly transfer  a  file  that  is not yet fully written.  If you can’t first write the files into a different directory, you should use a naming idiom that lets rsync avoid transferring files that are not yet finished  (e.g.  name  the file "foo.new" when it is written, rename it to "foo" when it is done, and then use the option --exclude='*.new' for the rsync transfer).
Messages postés
558
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
19 juin 2019
16
0
Merci
Ok merci pour ces précisions.

Je teste dans la matinée