Comment puis-je trouver uniquement les fichiers * .mp3 avec une commande récursive comme ls -R *.mp3
dans un répertoire qui contient plusieurs sous-répertoires et à la fin copier ces fichiers dans un répertoire que je choisis.
Merci pour votre aide.
command-line
V 3 L 3 N 0
la source
la source
find /path/to/dir/ -name '*.c' | xargs cp -t /target/
xargs
est normalement beaucoup plus rapide. Je viens de lancer un test rapide ici pour trouver une charge de fichiers c et les exécuterls -l
. C'est 0m2.420s pourxargs
et 0m25.494s pour-exec
... De toute évidence, dans ce cas, l'cp
opération va prendre la plupart du temps, donc cela n'a probablement pas d'importance, mais cela vaut la peine d'être noté.-n`` switch to the
commande cp` pour éviter d'écraser dans le cas de noms en double (ou d'écrire un script qui vérifie les doublons avant de copier et de renommer la cible si nécessaire)Il y a aussi une autre façon de le faire qui, je pense, conviendra parfaitement à votre objectif. Vous pouvez combiner
find
avec unewhile
boucle et même pas besoin d'utiliser l'unexec
ou l'autrexargs
. Si, par exemple, vous vouliez copier votremp3s
de votre dossier de téléchargement vers votre dossier de musique, vous utiliseriez le script suivant, que j'ai utilisé plusieurs fois.Vous pouvez le modifier comme vous le souhaitez en changeant les répertoires qui
find
recherchent et placent les fichiers résultants; si aucun répertoire n'est indiqué,find
recherche l'ensemble du dossier de départ. Vous pouvez également modifiercp
àmv
ou d' autres commandes. Il est assez rapide car je viens de le tester avec 3945.jpg
fichiers! Copiez-le dans un éditeur de texte, enregistrez-le, puis rendez-le exécutable en exécutantchmod +x myscript
.Sur ce wiki Bash noté, il est montré combien il est utile de combiner la
while
boucle et lesread
commandes pour traiter la sortie de lafind
commande; et la façon dont je l'ai fait garantit que le script ne se cassera pas s'il rencontre des noms de fichiers avec des espaces ou d'autres caractères spéciaux inattendus.Pour des informations plus générales sur la
find
commande, entrez dans le terminalman find
ou consultez les pages de manuel Ubuntu en ligne . Pour une excellente introduction à l'utilisation de find, consultez également cet article .la source
find ~/Downloads -type f -iname '*.mp3' | while read mp3file; do cp "$mp3file" ~/Music; done
plus simple?-n`` switch to the
commande cp` pour éviter d'écraser dans le cas de noms en double (ou d'écrire un script qui vérifie les doublons avant de copier et de renommer la cible si nécessaire)