Commande FIND et deplacement de fichiers

pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   -  
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Modérateur, Contributeur sécurité Dernière intervention   24 685
 
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 702 Date d'inscription   Statut Membre Dernière intervention   23
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   24 685 > pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   6 431 > Malekal_morte- Messages postés 180304 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   24 685 > zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention  
 
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   Statut Contributeur Dernière intervention   6 431 > Malekal_morte- Messages postés 180304 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
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   Statut Contributeur Dernière intervention   6 431
 
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 702 Date d'inscription   Statut Membre Dernière intervention   23
 
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   Statut Contributeur Dernière intervention   6 431
 
../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   Statut Contributeur Dernière intervention   6 431
 
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 702 Date d'inscription   Statut Membre Dernière intervention   23
 
Ok merci pour ces précisions.

Je teste dans la matinée
0