web-dev-qa-db-fra.com

Déplacer des images de sous-dossiers vers de nouveaux sous-dossiers

J'ai un dossier composé de M plusieurs sous-dossiers, chacun contenant des fichiers texte et N images (*.png)

Voici à quoi ressemble l'arbre:

/parent/
  /sub-folder1/
   /data1.dat
   /data2.dat
   /image1.png
   /image2.png
   ...
   /imageN.png
 /sub-folder2/
   /data1.dat
   /data2.dat
   /image1.png
   /image2.png
   ...
   /imageN.png
 ...
 /sub-folderM/
   /data1.dat
   /data2.dat
   /image1.png
   /image2.png
   ...
   /imageN.png

notez que toutes les images de chaque sous-dossier portent le même nom (par exemple: image1.png, ..., imageN.png)

Ce dont j'ai besoin, c'est de déplacer uniquement les images dans un nouveau dossier parent (disons parent2), tout en répliquant la structure des sous-dossiers. Une fois le déplacement terminé, le nouveau dossier parent devrait ressembler à ceci:

/parent2/
  /sub-folder1/
   /image1.png
   /image2.png
   ...
   /imageN.png
 /sub-folder2/
   /image1.png
   /image2.png
   ...
   /imageN.png
 ...
 /sub-folderM/
   /image1.png
   /image2.png
   ...
   /imageN.png

(ie: uniquement des images et respectant la même structure de sous-dossiers)

et le dossier parent d'origine devrait ressembler à:

/parent/
  /sub-folder1/
   /data1.dat
   /data2.dat
 /sub-folder2/
   /data1.dat
   /data2.dat
 ...
 /sub-folderM/
   /data1.dat
   /data2.dat

(ie: images déplacées)

J'ai vu quelques exemples de scripts qui peuvent déplacer tous les fichiers dans un nouveau dossier ( script Shell pour déplacer tous les fichiers des sous-dossiers vers le dossier parent ) ou certains qui ne peuvent déplacer que des images ( Script pour déplacer des images ) mais je n'en ai pas trouvé un qui le ferait alors que en respectant l'arborescence des sous-dossiers.

2
Gabriel

Vous pouvez essayer d'utiliser rsync:

rsync -av --include="*/"  --include='*.png' --exclude='*' parent1 parent2

cela crée le répertoire parent2 et copie tous les fichiers avec l'extension .png avec une structure de sous-répertoire.
explication

  • -v verbeux pour voir ce qui est copié
  • -un mode d'archivage (copier les sous-répertoires avec la même propriété, les autorisations, etc.)
  • --include '* /' --include = '*. png' inclut les fichiers de fin .png la première partie consiste à créer des sous-répertoires
  • --exclude = '*' exclut tous les autres fichiers pour plus d'informations, voir la page de manuel de rsync
4
kubacapek
  1. Copiez parent1 vers parent2
  2. Supprimer les fichiers dat des sous-répertoires parent2
  3. Supprimer les fichiers png des sous-répertoires parent1
$ cp -r parent1/ parent2
$ rm parent2/*/*.dat
$ rm parent1/*/*.png
2
sasha