Bonjour,
Je galère un peu avec la commande mv
Je voudrais faire déplacer tous les fichiers & dossiers de plus de une semaine en conservant l'arborescence dans un autre dossier.
J'imagine que je dois combiner un find et la commande mv mais je tourne en rond là
Merci pour votre aide
Jerry
# Pas que find
Posté par GG (site web personnel) . Évalué à 5.
Il te faudra aussi utiliser la commande man.
Par exemple : man find
Quand tu auras trouvé tes fichiers, tu pourras ajouter -exec.
Bonne lecture.
Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html
[^] # Re: Pas que find
Posté par jebau . Évalué à -1.
Merci de ton aide Grégoire G
J'imagine que tu ne comprends pas l'aide sollicité à des experts …
Dommage qu'il n'existe pas de commande pour rendre ton commentaire plus constructif et/ou agréable.
bat
[^] # Re: Pas que find
Posté par Vroum . Évalué à 3.
Est-ce que tu as fait un
man find
avant de répondre de manière aussi discourtoise…?La page de manuel te donne suffisamment d'information et Grégoire G t'oriente même vers la sous-commande utile.
Fais un minimum d'effort quand même !
[^] # Re: Pas que find
Posté par jebau . Évalué à -2.
Oui vous avez raison, j'ai pas cherché sur google ou autre avant, je voulais que les autres travaillent à ma place sans rien apprendre, je suis vraiment un gros nul et médiocre en ligne de commande! Excusez moi de ma condescendance…
Bonne journée.
[^] # Re: Pas que find
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
Ce qu'il essaye de te dire, ce n'est pas que la réponse est sur gogole mais que normalement tu as tout ce qu'il faut dans le 'man find' Après tu peux ne pas avoir compris, et dans ce cas il faut indiquer ce que tu as essayé (ce qui montrera que tu as fait ton boulot et n'attends pas que ça te tombe tout mâché dans la bouche) et pourquoi (donc ce que tu as compris pour qu'on puisse éventuellement te réexpliquer si ce n'est pas clair)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# ca ressemble à un exo de TP
Posté par NeoX . Évalué à 3. Dernière modification le 03 novembre 2017 à 22:27.
comme dans tout exercice de programmation il faut decomposer le probleme en probleme plus simple,
c'est ce qu'on appelle l'algoritmie
dans ton cas :
1°) trouver les fichiers qui ont moins d'une semaine
2°) pour chaque fichier trouver, obtenir l'arborescence et le nom du fichier
3°) recreer l'arborescence
4°) deplacer le fichier dans la nouvelle arborescence
bon comme certains, depuis que linux existe, se sont deja posé la question avant toi
il y a des outils pour cela
1°)
find
me semble un bon point de depart,man find
pour en obtenir les options2 à 4 : il y a surement des options à
mv
pour deplacer AVEC l'arborescence, sinon peut-etre quersync
saurait le fairesinon, ben là il va falloir coder, avec des boucles pour faire :
[^] # Re: ca ressemble à un exo de TP
Posté par totof2000 . Évalué à 2.
pas besoin de boucle avec find : il est possible d'exécuter une action pour tout fichier trpuvé avec l'option -exec.
Ca fait un truc du genre :
le motif {} sera remplacé par le chemin du fichier trouvé.
Exemple pour lister les fichiers trouvés dans une arborescence :
Je donne cette piste au P.I même s'il s'agit d'un TP car elle n'est pas forcément simple à comprendre à partir d'un man, et peut s'avérer très utile.
[^] # Re: ca ressemble à un exo de TP
Posté par jebau . Évalué à -1.
j'ai déjà exploré ce coté là mais la mv me donnent des problèmes.
Merci de vos pistes.
Je crois que je vais utiliser un workaround comme crontab et le lancer chaque semaine
Et je quitte ce forum cela fera du bien à certain et promis si j'ai un problème sous windows --> F1 et sous linux --> man ! ;)
Bonne journée
[^] # Re: ca ressemble à un exo de TP
Posté par jebau . Évalué à 3.
Sinon j'ai trouvé sur d'autres forums en regroupant les infos et un peu de débogage, mon problème à la base est l'utilisation de -type que j'ai remplacé par -maxdepth
Et je partage au cas où …
find /source -maxdepth 1 -mtime +7 -exec mv '{}' /destination/ \;
Bonne journée
[^] # Re: ca ressemble à un exo de TP
Posté par Obsidian . Évalué à 3.
Salut,
Merci du partage (qui est un peu l'âme du site) mais juste pour info, ici, tu ne résous pas du tout ton problème initial. Au contraire, tu te limites ici à ce qui se trouve dans ton répertoire « source » SANS descendre dans ses sous-répertoires, ce qui est justement le problème qui t'amène ici.
Le problème principal est que, contrairement à d'autres commandes, « mv » ne va pas créer le sous-répertoire parent s'il n'existe pas à l'avance. Tu pourrais tout faire tenir en une seule commande
find
mais il faudrait pour cela tester l'existence du sous-répertoire (avectest
ou avec les opérateurs de bash, le créer le cas échéant avecmkdir -p
(-p pour créer les sous-répertoires parents si nécessaire) et enfin, y copier ton fichier.Mais il y a plus rapide : « cp -R » permet de COPIER récursivement une ou plusieurs sources vers une destination donnée et par conséquent, les sous-répertoires et toute l'arborescence. Donc, si ton répertoire initial n'est pas trop lourd, je le copierais en entier avec cette commande puis j'utiliserais ensuite find pour supprimer toutes les copies des fichiers âgés de MOINS d'une semaine.
Plutôt que les supprimer directement, je les déplacerais dans un répertoire temporaire pour éviter tout accident puis, une fois m'être assuré de son contenu, je supprimerais le répertoire temporaire en question.
Enfin, si l'opération que tu comptes faire est régulière, alors tu peux te permettre de saisir directement la commande que tu cites sans même utiliser « maxdepth » puisque tu sais que les sous-répertoires de destination existeront déjà.
Et en bonus : si tu comptes mettre en place une copie de l'arborescence vide (c'est-à-dire juste les sous-répertoires sans les fichiers) justement pour l'exploiter de cette façon, tu peux utiliser l'option « -type d » de find pour lui demander de trouver tous les répertoires.
Bon courage.
[^] # easy peasy
Posté par benja . Évalué à 1. Dernière modification le 04 novembre 2017 à 19:15.
find . -depth -mtime +6 -a \( -type d -exec /bin/echo mkdir /dest/{} \; -o -type f -exec /bin/echo mv {} /dest/{} \; \) 2> /dev/null
Mtime à adapter en fonction de ce que tu veux (et oui, le titre de ton sujet est en contradiction avec son corps).
De rien, man est ton ami pour les explications… (édit je m'adresse à l'auteur de la question)
(edit2: ça ne marche pas en fait… désolé j'avais voulu être plus astucieux, mais bon… il reste la possibilité de créer d'office les répertoires en bougeant le test mtime dans la branche qui copie les fichiers, et éventuellement avoir une autre commande pour purger les répertoires vides)
[^] # Re: easy peasy
Posté par totof2000 . Évalué à 2.
le faire en 2 passes éventuellement, sachant que mkdir -p crée toute une arborescence si elle n'existe pas.
# essaye avec ça
Posté par MicP . Évalué à 1. Dernière modification le 06 novembre 2017 à 17:07.
Si le répertoire n'existe pas dans la cible, il sera créé.
[^] # Re: essaye avec ça
Posté par Anonyme . Évalué à 4.
Mais oui, faisons 1 millions de fork pour 1 millions de fichiers…
[^] # Re: essaye avec ça
Posté par MicP . Évalué à 2. Dernière modification le 07 novembre 2017 à 08:50.
Ouhlà !!! Tu as tout-à fait raison
Désolé : je me suis lamentablement planté en proposant ça.
=======
Il faudrait barrer mon précédent message, mais je ne peux l'éditer.
Si un modérateur a quelques instants pour le faire, je l'en remercie d'avance.
[^] # Re: essaye avec ça
Posté par NeoX . Évalué à 3.
en meme temps c'est bien pour apprendre ;)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.