Un enfoque libre de raza con GNU ln
proporcionado file1
no es del tipo directorio :
ln -PT file1 file2 && rm file1
(Excepto por errores en algunos sistemas de archivos de red), eso garantiza que ningún file2
archivo se anulará (o que si file2
es de tipo directorio, file1
no se moverá a él), porque la link()
llamada al sistema, al contrario de la rename()
llamada del sistema, fallará si el El objetivo existe.
Sin embargo, habrá un estado intermedio donde el archivo existe tanto como file1
y file2
.
La -T
opción (hacer siempre un directorio link("file1", "file2")
aunque file2
sea de tipo) es específico de GNU.
También puedes usar el link
comando:
link file1 file2 && rm file1
Sin embargo, si file1
es un enlace simbólico, dependiendo de la implementación, file2
será un enlace directo a ese enlace simbólico o al destino de ese enlace simbólico (en Solaris, use /usr/sbin/link
, not /usr/xpg4/bin/link
).
pipefail
opción activada ya que 141 sería el estado de salida deyes
,mv
que no tendría ninguna razón para obtener un SIGPIPE aquí.-T
para eso.mv
lugar del deyes
, la solución más simple podría sermv -i file1 file2 < <(yes n)