Commande FIND et deplacement de fichiers

Fermé
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - Modifié par pcsystemd le 27/07/2016 à 16:39
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 28 juil. 2016 à 09:17
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.
A voir également:

4 réponses

Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020 24 629
Modifié par Malekal_morte- le 27/07/2016 à 16:43
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...
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
27 juil. 2016 à 17:20
Merci.

Je connais cette commande mais je ne suis pas certain que cela créait le répertoire si celui ci n'existe pas car il faut que les fichiers soient correctement déplacer dans son répertoire.

Par exemple :
./648/psql_1_0.jpg doit etre déplacer dans /path/648/psql_1_0.jpg donc si le répertoire n'existe pas dans /path/ il doit être créer.
0
Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020 24 629 > pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024
Modifié par Malekal_morte- le 27/07/2016 à 19:06
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.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020
27 juil. 2016 à 19:13
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/ \;
0
Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020 24 629 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
Modifié par Malekal_morte- le 27/07/2016 à 19:25
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 '*'
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020
27 juil. 2016 à 19:27
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 ;-\
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
27 juil. 2016 à 18:10
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 ?


0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
28 juil. 2016 à 06:46
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/ \;

0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
28 juil. 2016 à 07:40
../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.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
28 juil. 2016 à 07:49
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).
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
28 juil. 2016 à 09:17
Ok merci pour ces précisions.

Je teste dans la matinée
0