Déplacer des dossiers présents dans une liste (fichier.txt)

Résolu/Fermé
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - 27 juil. 2016 à 10:41
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - 28 juil. 2016 à 11:17
Bonjour,

J'ai un fichier qui contient des noms de dossier sous la forme :
1
2
6
256
3548
596
24

Je souhaiterais lister le contenu de ces répertoires présents dans ce fichier et si des fichiers ou sous dossiers sont trouvés pour chacun de ces répertoires, je voudrais déplacer ces répertoires et tout leurs contenus (fichiers et sous dossiers) dans un autre dossier.

Peut être avec les commande
ls, find,xarg
mais je ne vois pas la syntaxe a utiliser

Une idée?
Merci
...


4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
27 juil. 2016 à 12:02
Salut,

while read ligne;do find "${ligne}" -maxdepth 0 -type d ! -empty -exec echo "mv -v {} /rep/dest" \;;done < fichier.txt


En supposant que les répertoires listés sont bien dans le même répertoire où se trouve le fichier (fichier.txt) et d'où est lancée la commande ;-\

Si c'est concluant, enlève la commande
echo
et les quotes doubles qui l'entourent.
0
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
27 juil. 2016 à 14:44
Super sympa zipe31,

C'est ok.

Merci
0
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
Modifié par pcsystemd le 28/07/2016 à 09:52
Salut zipe31,

Juste un complément et si je veux faire la meme chose avec des fichiers qui sont dans ces repertoires.

Je m'explique

Mon fichier contient une partie du nom des fichiers donc :
220_542_15698
220_542_189
220_542_2569
220_28_3
220_28_15
220_54_653
220_54_158977
etc..


Je veux déplacer tous les fichiers dont le nom contient chaque ligne de ce fichier et qui sont dans différents sous répertoires du répertoire principal d 'ou je lance ma commande vers les sous répertoires places sur un autre disque et si le sous répertoire n'existe pas le créait.


Merci
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419 > pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024
28 juil. 2016 à 09:58
Ben faut juste préciser le répertoire (
find /chemin
), remplacer le type de fichier (
type -d
par
-type f
), rajouter une recherche sur le nom (
-name "${ligne}*"
et remplacer
-exec …
par
-delete
et ça devrait le faire ;-))
0
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
28 juil. 2016 à 10:19
Merci.

J'ai fait ça mais apparemment ce la ne fonctionne pas :

while read ligne;do find .  -maxdepth 0 -type f -name "*${ligne}*" ! -empty -exec echo "mv -v {} /rep/destiantion/" \;;done < file.txt 


Pour info le nom des fichiers sont :

t21_0_220_542_15698_2.jpg
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
28 juil. 2016 à 10:24
Oups ;-(
-maxdepth 0
est en trop du coup, de même que
! -empty
qui ne concerne que les répertoires.
0
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
28 juil. 2016 à 10:42
Merci mais j'ai encore un petit souci.

Je suis dans le dossier 230 et je veux déplacer tous les fichiers de la liste qui sont dans des sous repertoires du dossier 230 mais cela semble ne pas fonctionner avec la commande :

while read ligne;do find .  -type f -name "*${ligne}*" -exec echo "mv -v {} /ref/destination/" \;;done < file.txt

0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
28 juil. 2016 à 10:50
Sans voir les messages d'erreurs ou du moins la sortie de la commande, difficile de se faire une idée ;-((

En réduisant la liste des fichiers et en ne ciblant qu'un répertoire, que renvoie :

while read ligne;do find REP_UNIQUE  -type f -name "*${ligne}*" -exec echo "mv -v {} /ref/destination/" \;;done < file.txt
0
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
28 juil. 2016 à 11:17
Oui c'est Ok.

Oups j'ai besoin de congés! C'est moi qui lançait la commande du mauvais repertoire

Merci encore.
0