écrire un script dans le terminal pour déplacer les fichiers des sous-dossiers vers un dossier parent

J’ai un foloder parent X qui inclut les sous-dossiers X1, X2 et X3. Chacun de ces sous-dossiers contient des fichiers musicaux. Je voudrais déplacer ces fichiers dans le dossier principal X et supprimer les sous-dossiers X1, X2 ..etc.

Comment puis-je faire cela dans le terminal (mac)?

merci un million d’avance,

Vous n’avez probablement pas besoin d’un script complet pour le faire. il devrait être faisable depuis la ligne de commande. Disons que tous les fichiers musicaux que vous voulez déplacer se terminent par .mp3, et aucun des autres fichiers (ceux que vous ne voulez pas déplacer) se terminent de cette manière. Si tel est le cas, vous pouvez utiliser cd pour accéder au répertoire X, puis exécutez:

mv X1/*.mp3 . 

… et ainsi de suite pour les deux autres sous-répertoires.
Sinon, si vous voulez faire tous les fichiers en même temps, vous pouvez le faire:

 i=0; while [ $i -lt 3 ]; do i=$(( $i + 1 )); mv X$i/*.mp3 .; done 

dans lequel le nombre après le “-lt” est le suffixe du répertoire final à partir duquel vous voulez extraire les fichiers.

Lorsque vous avez terminé, vous pouvez utiliser

 rmdir X1 

supprimer les répertoires s’ils sont vides, ou

 rm -r X1 

s’ils ne le sont pas. Vous pouvez également le construire dans le one-liner ci-dessus comme ceci:

 i=0; while [ $i -lt 3 ]; do i=$(( $i + 1 )); mv X$i/*.mp3 .; rm -r X$i; done 

… assurez-vous simplement qu’il n’y a rien d’autre dans ces répertoires à conserver avant de le faire.

UPDATE : Si les sous-répertoires ne sont pas systématiquement nommés, il existe un autre moyen de le faire. Notez que cela ne fonctionnera que si vous voulez extraire les fichiers de tous les sous-répertoires du répertoire parent:

 for i in `ls -l | egrep '^d'| awk '{print $10}'`; do mv $i/*.mp3 .; done 

Les éléments suivants émettront quelques messages d’erreur si vous avez des fichiers dans le répertoire de niveau supérieur et une erreur à propos de l’impossibilité de supprimer ‘X’, mais ils peuvent être ignorés en toute sécurité:

 find X -type f -exec mv {} X \; # Move all files into X find X -depth -type d -exec rmdir {} \; # Remove all subdirectories of X 

Cela va déplacer tous les fichiers. Si vous souhaitez limiter les fichiers à un certain ensemble, utilisez un qualificateur -name (ou autre) dans la première commande find pour filtrer les fichiers déplacés.