J'ai une collection de répertoires qui contiennent tous un fichier particulier qui porte le même nom dans tous les répertoires.
dir1/dirA/file.txt
dir1/dirB/file.txt
dir1/dirC/file.txt
....
dir4/dirX/file.txt
dir4/dirY/file.txt
dir4/dirZ/file.txt
Je souhaite copier ces fichiers dans un autre répertoire, de sorte que le nom de chaque fichier correspond au nom de son répertoire parent:
all_files/
dirA.txt
dirB.txt
dirC.txt
....
dirX.txt
dirY.txt
dirZ.txt
Bien que je comprenne que ces exemples peuvent entraîner des chevauchements, ce n'est pas un problème pour moi - je sais que tous les répertoires cibles ont des noms uniques.
J'utilise bash sous OS X. J'ai essayé de faire plusieurs choses comme celle-ci (voir ici et ici ). Ma pensée serait de scinder la chaîne sur les barres obliques, d’obtenir l’avant-dernière et de l’utiliser, mais je ne pouvais pas le faire fonctionner (en fonction ce et d'autres):
for name in `ls */*/file`
directory=${DIRS[${#DIRS[@]} - 2]}
mv name ../all_files/${directory}.txt
done
Cependant, je ne pouvais pas le faire fonctionner.