una txt sobreescribir script para opt documento desde copiar como carpeta archivos archivo linux bash cp

txt - copiar y sobreescribir archivos en linux



Cómo hacer que el comando cp cree las carpetas necesarias para copiar un archivo a un destino (9)

Esta pregunta ya tiene una respuesta aquí:

Al copiar un archivo usando cp a una carpeta que puede o no existir, ¿cómo puedo hacer que cp cree la carpeta si es necesario? Esto es lo que he intentado:

[root@file nutch-0.9]# cp -f urls-resume /nosuchdirectory/hi.txt cp: cannot create regular file `/nosuchdirectory/hi.txt'': No such file or directory


No hay tal opción. Lo que puedes hacer es ejecutar mkdir -p antes de copiar el archivo

Hice un script muy bueno que puedes usar para copiar archivos en ubicaciones que no existen

#!/bin/bash if [ ! -d "$2" ]; then mkdir -p "$2" fi cp -R "$1" "$2"

Ahora solo guárdalo, dale permisos y ejecútalo usando

./cp-improved SOURCE DEST

Puse la opción -R pero es solo un borrador, sé que puede ser y lo mejorarás de muchas maneras. Espero te ayude


No sabía que podías hacer eso con cp.

Puedes hacerlo con mkdir ..

mkdir -p /var/path/to/your/dir

EDITAR Ver la answer de lhunath para incorporar cp.


Para ampliar la respuesta de Christian, la única forma confiable de hacerlo sería combinar mkdir y cp :

mkdir -p /foo/bar && cp myfile "$_"

Además, cuando solo necesita crear un directorio único en una jerarquía existente, rsync puede hacerlo en una sola operación. Soy un gran fan de rsync como un reemplazo de cp mucho más versátil, de hecho:

rsync -a myfile /foo/bar/ # works if /foo exists but /foo/bar doesn''t. bar is created.


Para aquellos que están en Mac OSX, tal vez la forma más fácil de solucionar esto es usar el ditto (solo en el mac, AFAIK, sin embargo). Creará la estructura de directorios que falta en el destino.

Por ejemplo, hice esto.

ditto 6.3.2/6.3.2/macosx/bin/mybinary ~/work/binaries/macosx/6.3.2/

donde ~/work no contenía el directorio de archivos binarios antes de ejecutar el comando.

Pensé que rsync debería funcionar de manera similar, pero parece que solo funciona para un nivel de directorios faltantes. Es decir,

rsync 6.3.3/6.3.3/macosx/bin/mybinary ~/work/binaries/macosx/6.3.3/

funcionó, porque ~ / work / binaries / macosx existía pero no ~ / work / binaries / macosx / 6.3.2 /


Sorprendentemente, no veo la respuesta correcta en este hilo, simplemente use:

cp -r /foo/bar/baz /tmp

Como de costumbre, un simple consejo RTFM es suficiente, lo anterior copiará el archivo baz en / tmp y debajo de los subdirectorios foo / bar (se crearán si no existen)

cp --help -R, -r, --recursive copy directories recursively


También se puede usar el comando find :

find ./ -depth -print | cpio -pvd newdirpathname


rsync es trabajo!

#file: rsync -aqz _vimrc ~/.vimrc #directory: rsync -aqz _vim/ ~/.vim


mkdir -p `dirname /nosuchdirectory/hi.txt` && cp -r urls-resume /nosuchdirectory/hi.txt


cp -Rvn /source/path/* /destination/path/ cp: /destination/path/any.zip: No such file or directory

No creará rutas existentes en el destino, si la ruta tiene un archivo de origen dentro. Esto no crea directorios vacíos.

Hace un momento he visto xxxxxxxx: No existe tal archivo o directorio, porque me quedo sin espacio libre. sin mensaje de error.

con ídem:

ditto -V /source/path/* /destination/path ditto: /destination/path/any.zip: No space left on device

una vez liberado el espacio cp -Rvn /source/path/* /destination/path/ funciona como se espera