GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué mv no puede lidiar con la existencia del directorio del mismo nombre en el destino?

mv y rsync no son programas similares. En particular, mv a menudo intenta simplemente cambiar el nombre de los objetos. Si está en el mismo sistema de archivos, no copia el contenido en absoluto.

Si aún no tenías imperative_PLs/fortran , luego mv tomaría el fortran existente directorio y cámbiele el nombre a ese punto en el árbol.

Pero ya tiene un directorio (con contenidos) en esa ubicación. Debido a que un nombre solo puede hacer referencia a un solo objeto, el directorio existente debería eliminarse o cambiarse de nombre. mv asume que no desea hacer ninguna de las dos y aborta.

rsync en su lugar, copia los archivos individuales y otros contenidos dentro de fortran y los coloca en el imperative_PLs/fortran existente directorio.

Piense en ello como rename en cambio, y el comportamiento puede parecer más comprensible.


mv es en realidad rename debajo de la cubierta.

Si mueve un archivo a otro archivo, mv asume que sabe lo que está haciendo y sobrescribe el archivo de destino.

Si mueve un directorio a otro directorio, mv asume que desea mantener el nombre base de su directorio original y crearlo en el directorio de destino. Si todavía no hay un directorio con ese nombre en el lado de destino, o si existe un directorio con ese nombre pero está vacío, la operación se realiza correctamente.

Sin embargo, si el directorio de destino ya existe y no está vacío, ya no es un rename pero eso debería ser una eliminación recursiva de archivos y directorios. rename no está diseñado para hacerlo, por lo que falla, mv no va más allá ya que asume que no querías hacerlo y también falla.


  1. mv no funciona en este caso porque no ha sido diseñado para hacerlo. Las llamadas al sistema son (probablemente)

    • Mover al mismo sistema de archivos:rename (originalmente link y unlink )
    • Moverse entre sistemas de archivos:copia recursiva del archivo seguida de unlink recursivo
  2. Opinión:Creo que no es tanto que haya sido diseñado no para trabajar, ya que no fue diseñado para manejar este caso de uso. Para una herramienta "simple" que pretende hacer una cosa bien, debe proporcionar un conjunto de interruptores para indicar a mv cuál de estos caminos de acción tomar:

    • Para rescatar con un error, como en la implementación actual
    • Para fusionar, saltando con un error si ya existe un archivo
    • Para fusionar, reemplazando cualquier archivo de destino que ya exista

Si la acción de fusionar/reemplazar es lo que desea, puede implementarla fácilmente con cp seguido de rm , o usando una de las utilidades de copia de árbol de archivos tar , pax , etc.


Linux
  1. Por qué me quedo con xterm

  2. ¿Por qué Rm puede eliminar archivos de solo lectura?

  3. ¿Archivos Cat con directorio?

  4. ¿Fusionar carpetas con Mv?

  5. ¿Puedes usar anclas ^ $ con Ls?

Comando Rsync en Linux con ejemplos

Comando de CD de Linux con ejemplos

¿Por qué el comando Ls tarda en interrumpirse en el directorio Nfs con muchos archivos?

¿Por qué puedo iniciar sesión con contraseñas parciales?

¿Linux puede manejar pantallas de ultra alta resolución?

ssh:¿por qué puedo iniciar sesión con contraseñas parciales?