449 votes

linux: copier et créer le répertoire de destination s'il n'existe pas

Linux: Je veux une commande (ou probablement une option pour cp) qui crée le répertoire de destination s’il n’existe pas.

Exemple:

 cp -? file /path/to/copy/file/to/is/very/deep/there
 

431voto

 test -d "$d" || mkdir -p "$d" && cp file "$d"
 

(il n'y a pas une telle option pour cp ).

270voto

Paul Whipp Points 2868

Ancienne question mais voici une réponse plus facile: cp le supporte mais vous devez lire la documentation complète (info cp invocation '):

--parents' Form the name of each destination file by appending to the target directory a slash and the specified name of the source file. The last argument given to cp 'doit être le nom d'un répertoire existant. Par exemple, la commande:

       cp --parents a/b/c existing_dir

 copies the file `a/b/c' to `existing_dir/a/b/c', creating any
 missing intermediate directories.
 
 /tmp $ mkdir foo
/tmp $ mkdir foo/foo
/tmp $ touch foo/foo/foo.txt
/tmp $ mkdir bar
/tmp $ cp --parents foo/foo/foo.txt bar
/tmp $ ls bar/foo/foo
foo.txt
 

Pas besoin de script.

21voto

Andy Ross Points 7024

La fonction shell qui fait ce que vous voulez, l'appelant une copie "enterrée" car elle creuse un trou dans lequel le fichier doit vivre:

 bury_copy() { mkdir -p `dirname $2` && cp "$1" "$2"; }
 

13voto

Jamie McCrindle Points 3347

Voici une façon de le faire:

 mkdir -p `dirname /path/to/copy/file/to/is/very/deep/there` \
   && cp -r file /path/to/copy/file/to/is/very/deep/there
 

dirname vous donnera le parent du répertoire ou du fichier de destination. mkdir -p dirname ... va alors créer ce répertoire en s'assurant que lorsque vous appelez cp -r, le répertoire de base correct est en place.

L'avantage de ce sur-parent est qu'il fonctionne dans le cas où le dernier élément du chemin de destination est un nom de fichier.

Et cela fonctionnera sur OS X.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X