2 votes

Cp ou rsync en ligne de commande pour explorer le lecteur en cherchant seulement des types de fichiers spécifiques et les mettre quelque part ?

Est-il possible, en utilisant uniquement la ligne de commande, d'utiliser quelque chose comme la commande cp o rsync pour parcourir un disque dur en ne recherchant que des fichiers image/vidéo ? Et peut-être, au cours du processus de copie de ces fichiers vers un autre emplacement, conserver les noms et chemins des dossiers dans le nouvel emplacement ?

J'ai quelques vieux disques durs sur lesquels je veux faire des sauvegardes de mes photos et vidéos, mais ils sont éparpillés dans des milliers de dossiers et je préférerais que l'ordinateur fasse le plus gros du travail pour moi, si possible, mais je suis encore en train d'apprendre à connaître la ligne de commande et ses capacités impressionnantes.

4voto

rsm Points 217

Vous pouvez utiliser find pour rechercher les fichiers qui vous intéressent, par exemple :

find /mnt/hd1 -name \*.jpg

recherchera les fichiers jpg (enfin, les fichiers avec une extension .jpg) dans le répertoire /mnt/hd1. Si vous voulez simplement copier ces fichiers quelque part, vous pouvez le faire :

find /mnt/hd1 -name \*.jpg -exec cp {} /mnt/dest

Cela fonctionnera cp pour chaque fichier qu'il peut trouver dans le répertoire /mnt/dest.

J'espère que cela vous aidera :)

2voto

Mridang Agarwalla Points 7797

Une autre possibilité, si vous ne voulez pas l'automatiser en un seul script, est d'utiliser votre commande find pour créer un script bash. Ensuite, exécutez le script de bash. De cette façon, vous pouvez également connaître l'origine du fichier.

De plus, je modifierais légèrement ce qui précède au cas où vous auriez des noms de fichiers en double si vous soupçonnez cela dans votre environnement. Vous auriez besoin d'un contrôle d'erreur dans votre script.

Voulez-vous également conserver le chemin du répertoire ?

c'est-à-dire que si un fichier est ici

/source/a/b/c/d/e.jpg

Voulez-vous le copier dans

/dest/a/b/c/d/e.jpg ?

ou

/dest/e.jpg ?

Ainsi, un exemple pourrait être

find /source -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/}' > copy.sh

Cela copierait juste dans un répertoire /backup

Pour préserver, vous pourriez faire

(cd /source; find . -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/"$1}') > copy.sh

Mais alors vous voudriez créer tous les répertoires d'abord.

(cd /source; find . -type d -print | awk '{print "mkdir -p /backup/"$1}' > mkdir.sh

L'avantage de cette méthode est que vous pouvez également examiner les scripts et vous assurer que tout semble correct avant d'exécuter réellement les commandes. Je me suis brûlé plusieurs fois en exécutant la commande avec des résultats ...erm...inattendus :)

De plus, le fait d'avoir le script vous donne également un enregistrement de ce que vous allez faire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X