J'ai toute ma musique dans un dossier /media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside
. Je veux copier tous les mp3 au /media/kalenpw/HDD/Music
alors j'ai utilisé:
cp -R /media/kalenpw/MyBook/Music/*.mp3 /media/kalenpw/HDD/Music
toutefois, cela ne fait que copier les mp3 dans le dossier de musique racine et ne pas ouvrir les sous-répertoires de l'artiste et copier ces fichiers.
J'avais l'impression que -R
copierait tous les fichiers de manière récursive. Comment puis-je atteindre ledit objectif?
Utilisation:
find /media/kalenpw/MyBook/Music/ -name '*.mp3' -exec cp {} /media/kalenpw/HDD/Music \;
La raison pour laquelle votre commande ne fonctionne pas est que les noms contenant des caractères génériques (*.mp3
) sont développés avant l'exécution de la commande. Par conséquent, si vous aviez trois fichiers (01.mp3
, 02.mp3
, 03.mp3
), votre commande effective était:
cp -R /media/kalenpw/MyBook/Music/01.mp3 /media/kalenpw/MyBook/Music/02.mp3 /media/kalenpw/MyBook/Music/03.mp3 /media/kalenpw/HDD/Music
Comme vous pouvez le constater, -R
n'a aucun effet dans ce cas.
Vous avez spécifiquement mentionné les fichiers/répertoire (s) à copier comme utilisant *.mp3
c'est-à-dire tout nom de fichier/répertoire se terminant par .mp3
.
Ainsi, tout fichier se terminant par .mp3
dans le répertoire /media/kalenpw/MyBook/Music/
et de la même manière, tout répertoire se terminant par .mp3
dans /media/kalenpw/MyBook/Music/
sera copié de manière récursive. Si aucun fichier/répertoire ne correspond, rien ne sera copié.
Maintenant, copiez tous les fichiers .mp3
de /media/kalenpw/MyBook/Music/
recursivley dans le répertoire /media/kalenpw/HDD/Music/
:
Utilisation de bash
:
shopt -s globstar
cp -at /media/kalenpw/HDD/Music /media/kalenpw/MyBook/Music/**/*.mp3
Utilisation de find
:
find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +
Vous pouvez également utiliser cpr :
$ cd /media/kalenpw/HDD/Music
$ cpr -p '/\.mp3$/' '/media/kalenpw/MyBook/Music/'
Notez que sans -p
cpr conservera les chemins de répertoire complets des noms de fichiers copiés.-r
peut être utilisé (au lieu de -p
) pour conserver le chemin sous '/media.../Music/'.cpr
veillera également à ce qu'aucun fichier ne soit écrasé, en ajoutant un numéro commençant par "0001" à tout nom de fichier répété copié.