Je veux cp aaa/deep/sea/blob.psd vers bbb/deep/sea/blob.psd
Comment puis-je faire la copie si le deep et sea les répertoires n'existent pas sous bbb pour que la copie crée à la fois les répertoires nécessaires et copie le fichier ?
En ce moment, je reçoisNo such file or directory car les profondeurs et la mer n'existent pas.
J'ai parcouru les pages d'aide de l'homme et d'autres questions, mais rien ne me saute aux yeux.
Le plus proche que j'ai est d'utiliser rcp pour le répertoire :
rcp -r aaa/deep/sea/ bbb/deep/sea/
bien que cela copie tout le répertoire et son contenu et je veux juste un seul fichier. Essayer de faire cela a cependant donné cp: cannot create regular file bbb/deep/sea/blob.psd' such file or directory
Réponse acceptée :
Essayez d'utiliser cette fonction suivante pour une telle situation :
copy_wdir() { mkdir -p -- "$(dirname -- "$2")" && cp -- "$1" "$2" ; }
et utilisez-le comme
copy_wdir aaa/deep/sea/blob.psd bbb/deep/sea/blob.psd
Au fait, GNU cp a un --parents option. C'est vraiment proche de ce que vous voulez, mais pas exactement.
Il créera également aaa répertoire dont vous n'avez apparemment pas besoin. Cependant, vous pouvez d'abord cd vers aaa et copier comme :
cd aaa && cp --parents deep/sea/blob.psd ../bbb/