¿Por qué algunos comandos GNU Coreutils tienen la -T/--no-target-directoryopción? Parece que todo lo que hace se puede lograr utilizando la semántica del .(punto propio) en una jerarquía de directorios Unix tradicional.
Considerando:
cp -rT /this/source dir
La -Topción evita que la copia cree un dir/sourcesubdirectorio. Más bien /this/sourcese identifica con diry los contenidos se asignan entre los árboles en consecuencia. Entonces, por ejemplo, /this/source/foo.cva dir/foo.cy sigue , en lugar de hacerlo dir/source/foo.c.
Pero esto se puede lograr fácilmente sin la -Topción de usar:
cp -r /this/source/. dir # Probably worked fine since dawn of Unix?
Semánticamente, el componente de punto final se copia como un elemento secundario de dir, pero, por supuesto, ese "elemento secundario" ya existe (por lo que no tiene que ser creado) y es en dirsí mismo, por lo que el efecto /this/pathse identifica con él dir.
Funciona bien si el directorio actual es el objetivo:
cp -r /this/tree/node/. . # node's children go to current dir
¿Hay algo que solo puedas hacer con -Teso que pueda racionalizar su existencia? (Además del soporte para sistemas operativos que no implementan el directorio de puntos, una razón no mencionada en la documentación).
¿El truco de puntos anterior no resuelve las mismas condiciones de carrera que se mencionan en la documentación de GNU Info -T?
.truco que hace el trabajo al copiar un archivo, pero no al cambiar el nombre de su nombre base al mismo tiempo!cp /path/to/file /target/dir/.Si/target/dir/fileexiste y es un directorio, ¡obtienes el mismo diagnóstico! Pero ha demostrado lo-Tque no se puede hacer sin él en un solo paso, sin condiciones de carrera: copie un archivo y cambie su nombre sin que se desvíe a un subdirectorio.