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/