GNU/Linux >> Tutoriels Linux >  >> Linux

Copier des types de fichiers spécifiques tout en conservant la structure des répertoires sous Linux

Il y a quelque temps, nous avons appris à copier certains types de fichiers d'un répertoire à un autre sous Linux. Aujourd'hui, nous allons faire la même chose mais en préservant également la structure des répertoires. Ce bref tutoriel explique comment copier des types de fichiers spécifiques tout en conservant la structure des répertoires sous Linux. Ici, j'ai donné deux façons différentes de le faire. Choisissez celui qui vous convient.

Copier des types de fichiers spécifiques tout en conservant la structure des répertoires sous Linux

Imaginez ce scénario.

J'ai un répertoire nommé "Linux" avec différents types de fichiers enregistrés dans différents sous-répertoires. Jetez un œil à la structure de répertoires suivante :

$ tree Linux/
Linux/
├── dir1
│   ├── English
│   │   └── Kina - Can We Kiss Forever.mp3
│   ├── Instrumental
│   │   └── Chill Study Beats.mp3
│   └── Tamil
│       ├── Kannan Vanthu.mp3
│       └── yarenna.mp3
├── dir2
│   ├── file.docx
│   └── Raja Raja Chozan Naan.mp3
├── dir3
│   ├── Bamboo Flute - Meditation - Healing - Sleep - Zen.mp3
│   └── pic.jpg
└── dir4
    ├── Aaruyirae.mp3
    └── video.mp4

7 directories, 10 files

Lister le contenu du répertoire à l'aide de la commande tree

Comme vous le voyez dans la structure de répertoires ci-dessus, le répertoire Linux répertoire a quatre sous-répertoires à savoir dir1 , rép2 , rép3 et dir4 . Le mp3 les fichiers sont dispersés dans les quatre sous-répertoires. Maintenant, je veux copier tous les mp3 fichiers dans un autre répertoire nommé "ostechnix" et aussi je veux garder la même structure de répertoires dans le répertoire cible.

Nous verrons d'abord comment faire cela en utilisant la commande "find".

Méthode 1 - utilisation des commandes "find" et "cp" ou "cpio"

Allez dans le répertoire source :

$ cd Linux/

Et copiez tous les types de fichiers mp3 à l'aide de la commande "find":

$ find . -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;

Décomposons la commande ci-dessus et voyons ce que fait chaque option.

  • trouver – commande pour rechercher des fichiers et des dossiers dans des systèmes de type Unix.
  • le point (.) - représente que nous copions le contenu du répertoire actuel.
  • -iname ‘*.mp3’ – rechercher des fichiers correspondant à l'extension .mp3.
  • -exec cp – exécutez la commande 'cp' pour copier les fichiers du répertoire source vers le répertoire de destination.
  • --parents - créer les répertoires parents intermédiaires si nécessaire pour préserver la structure des répertoires parents.
  • \{\} – est automatiquement remplacé par le nom de fichier des fichiers trouvés par la commande ‘find’. Et les accolades sont échappées pour les protéger de l'expansion par le shell dans certaines versions de la commande "find". Vous pouvez également utiliser {} sans caractères d'échappement.
  • ~/ostechnix – répertoire cible pour enregistrer les fichiers correspondants.
  • \; – lui indique que les commandes à exécuter sont maintenant terminées, et d'exécuter à nouveau la commande au prochain match.

Cette commande trouvera et copiera tous les fichiers de type mp3 du répertoire ~/Linux vers le répertoire ~/ostechnix. Et il préserve également la même structure de répertoires dans le répertoire cible.

Vous pouvez le vérifier en utilisant la commande "tree" aux deux endroits comme ci-dessous.

Lister le contenu du répertoire à l'aide de la commande tree sous Linux

Comme vous le voyez dans la sortie ci-dessus, le répertoire de destination ne contient que les fichiers mp3 et sa structure de répertoire est la même que le répertoire source.

Si vous faites cela depuis un autre emplacement, spécifiez le chemin complet du répertoire source comme ci-dessous.

$ find ~/Linux -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;

Cette commande trouvera tout le fichier dans Linux/ emplacement et copiez-les dans ostechnix/~/Linux/ .

Copier des types de fichiers spécifiques tout en conservant la structure des répertoires sous Linux

Si --parents l'option ne fonctionne pas, vous pouvez combiner la commande find avec cpio commande pour copier les fichiers en conservant la structure des répertoires.

$ find . -name '*.mp3' | cpio -pdm  ~/ostechnix

Ici,

  • cpio - Commande pour copier des fichiers vers et depuis des archives.
  • -p - Lire une liste de noms de fichiers à partir de l'entrée standard et les copier dans le répertoire spécifié.
  • -d - Créer des répertoires si nécessaire.
  • -m - Conserver l'heure de modification du fichier.

Pour plus de détails, consultez les pages de manuel.

$ man find
$ man cp
$ man cpio

Suggestion de lecture :

  • Comment organiser automatiquement des types de fichiers similaires dans des dossiers spécifiques

Méthode 2 – utilisation de Rsync

Rsync est un outil puissant utilisé vers/depuis des systèmes locaux et distants. Pour copier certains types de fichiers d'un répertoire à un autre tout en conservant la structure du répertoire parent, exécutez :

$ rsync -a -m --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix

Ou,

$ rsync -a --prune-empty-dirs --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix

Ici,

  • rsync - outil de copie de fichiers à distance (et local).
  • -a - mode archive pour conserver presque tout (y compris les liens symboliques, les dates de modification, les autorisations de fichiers, les propriétaires, etc.)
  • -m, --prune-empty-dirs - élaguer les répertoires vides de l'arborescence des sources. Si vous souhaitez inclure des répertoires vides, supprimez simplement cette option de la commande ci-dessus.
  • --include="*/" --include="*.mp3" --exclude="*" - Pour inclure uniquement des fichiers spécifiques, vous devez d'abord inclure ces fichiers spécifiques, puis exclure tous les autres fichiers. Dans notre cas, nous avons inclus les fichiers *.mp3 et excluons tout le reste.
  • ~/Linux - Répertoire des sources.
  • ~/ostechnix - Répertoire de destination.

Exemple de résultat :

Copier des types de fichiers spécifiques tout en conservant la structure du répertoire à l'aide de Rsync sous Linux

Pour plus de détails, consultez les pages de manuel.

$ man rsync

J'espère que cela vous aidera.


Linux
  1. Linux - Comment inspecter les informations de structure de répertoire d'un fichier Unix/linux ?

  2. Comment copier un répertoire en ligne de commande Linux [Astuce du débutant]

  3. Commande Linux cp

  4. 6 Exemples de commande mv pour déplacer ou renommer un fichier et un répertoire Linux

  5. commande linux pour vider tous les fichiers d'un répertoire

Commande Cp sous Linux (Copier des fichiers)

Commande Du sous Linux

Commande mv sous Linux

Comment afficher l'arborescence des répertoires sous Linux

Copier un fichier dans plusieurs répertoires à partir de la ligne de commande sous Linux

Comment tarer des types de fichiers spécifiques (extensions) dans un répertoire