Je suppose que l'extension de vos fichiers audio est .mp3
find <AudioFolderPath> -name '*.mp3' -exec mv -it <YourTargetFolder> {} +
Remarques:
Remplacez .mp3
par l'extension de vos fichiers audio
Remplacez-le <AudioParentFolderPath>
par le dossier parent qui contient vos sous-dossiers.
Remplacez <YourTargetFolder>
par le chemin du dossier dans lequel vous devez placer tous les fichiers.
Si les fichiers de remorquage de différents sous-dossiers portent le même nom, un seul sera déplacé.
modifier: Comme l'a dit Costas : "Le -i
commutateur rend mv
interactif, il vous demandera avant d'écraser les fichiers existants"
t
pourrait être pour "cible"?-t
permettez de spécifier d'abord la destination. à partir de lamv
page de manuel:-t, --target-directory=DIRECTORY
move all SOURCE arguments into DIRECTORY
Notez que cette commande écrasera tous les fichiers du même nom. Vous pouvez utiliser ceci pour être invité avant d'écraser:
Explication
-type f
: ne trouve que les fichiers réguliers.-mindepth 2
: recherche uniquement les fichiers dans les sous-répertoires.-exec mv -it ./ {}
: le-exec
moyen "exécuter cette commande sur chaque fichier trouvé". Le{}
sera remplacé par les noms de fichiers. Le-i
commutateur rendmv
interactif, il demandera avant d'écraser les fichiers existants et-t
définit le répertoire cible./
.+
: mettre les fichiers ensemble (dans une ligne d'argument) autant que le shell peut fonctionner avec la commande pour appeler les temps minimum de commande (pas un par un mais un à plusieurs).En ce qui concerne les suppressions de dossiers vides, vous pouvez utiliser la même recette:
la source
-type f
sélectionne uniquement les fichiers simples, à l'exclusion des liens symboliques, des canaux nommés et similaires. Pour déplacer tous les fichiers autres que les répertoires, vous pouvez le faire! -type d
.-L
paramètre-i
est standard,-t
est uniquement GNU (rien à voir avec Linux qui n'est qu'un noyau trouvé dans certains systèmes GNU et non GNU)-t
n'existe pas sur certains systèmes (comme un AIX pas si ancien)find . -type f -mindepth 2 -exec mv {} ./ \;
Oui, c'est une limite sur la taille cumulée des arguments et de l'environnement passés à l'
execve()
appel système lors de l'exécution d'une commande externe.Avec
zsh
, vous pouvez utiliser son intégré à lamv
place:Ou utilisez
zargs
pour diviser la liste en morceaux gérables:Avec
ksh93
:Avec GNU
xargs
et avec GNUmv
avec un shell oùprintf
est intégré (la plupart,mksh
étant l'exception notable):la source
zsh
cas où vous pouvez mettre des qualificatifs glob , par exemple(.)
ou(^/)
après dernier*
.Une solution assez portable pourrait être:
rechercher tous les fichiers dans tous les sous-dossiers et les déplacer dans le répertoire courant
Vous pouvez ajouter un
| egrep "\.au$|\.mp3$|\.ac3$"
entre les deux pour vous assurer que les fichiers que vous avez trouvés sont des fichiers avec une extension audio (ajoutez autant d'extensions que nécessaire pour couvrir tous les types, je n'en fournis que 3 communs)la source
find
du tout. Juste assezecho
ouprintf
find
ne résolvez pas le problème maisxargs
faites-le.