Tengo un montón de archivos y directorios en un subdirectorio que quiero mover al directorio principal. Ya hay algunos archivos y directorios en el directorio de destino que deben sobrescribirse. Los archivos que solo están presentes en el destino deben dejarse intactos. ¿Puedo obligarme mva hacer eso? ( mv * ..) Se queja
mv: cannot move `xyz' to `../xyz': Directory not empty
¿Qué me estoy perdiendo?
shell
command-line
rename
EricSchaefer
fuente
fuente

mv -f?mv -fno es la respuesta correcta.Respuestas:
Deberá copiarlos en el destino y luego eliminar la fuente, utilizando los comandos
cp -r * ..seguidos derm -rf *.No creo que pueda "fusionar" directorios usando
mv.fuente
mves más rápido porque estás en el mismo sistema de archivos? ¿Quécp -lsucede si usas para crear enlaces duros en lugar de mover realmente los archivos?cp -alugar decp -rpara preservar los atributos del archivo (marca de tiempo, permisos, etc.).cp -rl source destination && rm -r source.rsyncprobablemente sería una mejor opción aquí. Es tan simple comorsync -a subdir/ ./.Mi árbol de prueba en
filename:contentsformato:Corriendo
rsync:Da:
Y luego, para emular
mv, probablemente desee eliminar el directorio fuente:Dando:
Si esto está mal, ¿puede proporcionar un ejemplo similar (por ejemplo, usando mi árbol de prueba cerca de la parte superior de esta respuesta) con el resultado deseado?
fuente
rm -ral final para que sea básicamente lo mismo quemv.mves atómico, conserva los números de inodo (para que el archivo pueda permanecer abierto) y no requiere tiempo ni espacio para hacer una copia.cp -r; rm -r. Creo que en ese sentido,rsyncvale la pena mencionar también.rsyncpuede eliminar la fuente después de las copias con el--remove-source-filesparámetro Esta debería ser una manera conveniente de hacer lo que le gustaría.De la
rsync man page:fuente
cp -r; rmpor falta de espacio libre. En cambiorsync --remove-source-files, el espacio en disco usado minimizado evitó copiar sobre los mismos archivos exactos.Puede hacer esto con
cpyrm, pero sin copiar la gran cantidad de datos que intenta (presumiblemente) está tratando de evitar la transferencia. @mattdm aludió a esto en su comentario , y una respuesta para otra pregunta tiene una discusión más completa sobre varias opciones.Esencialmente, la
-lopción para elcpcomando crea enlaces duros a los archivos en lugar de copiar sus datos a archivos nuevos.fuente
cp -al source destinationpara preservar la información y los permisos del propietario.cpsobrescribe de forma predeterminada. La-fopción intenta eliminar el archivo (como enrm) antes de intentar copiar de nuevo, lo que puede ayudar si el proceso no puede abrir el archivo para escribir, aunque algunas personas prefieren ver que hubo un error. No sé si le importó al OP, pero de-ftodos modos agregué la bandera a mi respuesta.Aquí hay un script que mueve los archivos de debajo
/path/to/source/roota la ruta correspondiente debajo/path/to/destination/root.Cuidado, código no probado.
fuente
\;antes-ode la primera línea delfindcomando, y no debe escapar!en elif- es!, no\!Este hilo está disponible desde hace años y todavía ocupa el puesto número 1 en Google, así que quería agregar otro método. Cómo suelo hacer esto: empaquetar el contenido del subdirectorio en un tarball, mover el tarball al directorio principal y luego extraerlo con el comportamiento predeterminado de sobrescritura. Esto hace exactamente lo que estás buscando. Luego puedes eliminar tu subdirectorio.
fuente
Si tiene suficiente almacenamiento, puede hacerlo de la siguiente manera:
Asegúrese de que no haya ningún archivo importante con un ~ al final, pero si lo hay, puede agregarlo en
--suffix=whateveryouwantlugar del predeterminado.fuente