Me pregunto acerca de la dirección de la recursión en general y específicamente de la empresa.
La recursividad rm solo funciona hacia abajo ¿correcto?
En ejecución: sudo rm -R *.QTFS
eliminará todos los archivos * .QTFS en el directorio actual y sus hijos, ¿correcto?
El directorio actual como se muestra en ls -lha
también contiene .
y ..
enlaces por la falta de una mejor palabra, entonces, ¿por qué la recursividad no sigue estos hacia arriba en el árbol de directorios? ¿Hay un límite artificial en la aplicación rm, o .
y ..
no son cosas reales?
Respuestas:
rm -r x y
eliminaráx
yy
todo lo que esté dentro de ellos (si son directorios), pero no sus padres ni nada fuera de ellos.No. Eliminará todos los archivos nombrados
*.QTFS
, cualquier archivo recursivamente dentro de los directorios llamados*.QTFS
, y esos directorios mismos. Si desea ese otro comportamiento de eliminación, usefind -delete
.Es un límite artificial de
rm
.Sin embargo, no es realmente tan artificial: es la única forma en que podría funcionar. Si se
rm
siguen los..
enlaces principales , cadarm -r
eliminaría todos los archivos del sistema, siguiendo todos los..
enlaces hasta el final/
.rm
ve las entradas..
y.
en cada directorio cuando enumera el contenido y las ignora explícitamente por ese motivo.Puedes probar eso tú mismo, de hecho. Ejecutar
rm -r .
y la mayoría de lasrm
implementaciones se negarán a actuar, informando un error explícitamente:(ese mensaje es de GNU
rm
; otros son similares). Cuando encuentra estas entradas implícitamente, en lugar de como argumentos explícitos, simplemente las ignora y continúa. POSIX requiere ese comportamiento . En GNUrm
y muchos de los BSD, es proporcionado automáticamente por lafts_read
familia de funciones de jerarquía transversal..
y generalmente..
son entradas de directorio reales, aunque eso es específico del sistema de archivos. Casi siempre se presentarán como si fueran entradas reales de todos los códigos de usuario, independientemente. Muchas piezas de software (no solo ) hacen un caso especial de su comportamiento para atrapar o prevenir una recursión desbocada o indeseable.rm
fuente
fts_read
implementación, sin embargo, ese es solo para argumentos de línea de comandos.rm
ni siquiera ve*.QTFS
porque se ha expandido globalmente en los nombres de archivo por bash antes de que se invoque el binario rm. La respuesta de @ tobyink señala eso..
y..
conducta caso especial se dice que son la causa de la existencia dotfilesAdemás de lo que escribió Michael Homer, hay otro factor que dificulta la recurrencia accidental al directorio principal.
Vaya a su directorio de inicio y escriba algo como:
Verá que muestra una lista de archivos y directorios que contienen la letra "s". Sin embargo, no se muestran archivos que comiencen con un punto inicial. Para mostrarlos, puede usar:
Esto se debe a que el shell se niega a expandirse
*
para abarcar un punto inicial. Esto significa que:No recurrirá a
..
.fuente