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