Ventanas.  virus  Cuadernos.  Internet.  oficina.  Utilidades.  Conductores

Buenos días, queridos lectores. Hoy me gustaría hablar sobre la eliminación de un directorio en PHP. Parecería que la operación no es complicada, pero hay algunos matices. Veamos maneras de hacer esto.

PHP tiene una función para esto. rmdir(). Toma como argumento la ruta al directorio que desea eliminar. Sin embargo, el directorio debe estar vacio es la condición principal (excepto que el usuario que ejecuta el servidor web debe tener acceso de escritura al directorio). Si los archivos se colocan en el directorio, obtendremos un error al llamar a la función. En consecuencia, llegamos a la conclusión de que el directorio antes de usar la función rmdir() debe limpiarse primero.

En la red, se recomienda escribir una función a la que se le pasará la ruta del directorio que necesitamos eliminar como argumento. En el cuerpo de la función, es necesario organizar un listado de los contenidos del directorio, dentro del cual se comprueba si el archivo es un directorio. Si el archivo es un directorio, entonces por esta condición la función se llama a sí misma. Esto es necesario para limpiar los directorios anidados y funcionará en todos los niveles de anidamiento. De lo contrario, la función se aplica al archivo. desconectar()- está destinado a eliminar un archivo. Fuera de esta verificación, el último paso es eliminar el directorio.

Ejemplo de implementación:

Función recursiveRemoveDir($dir) ( $incluye = glob($dir."/*"); foreach ($incluye as $include) ( if(is_dir($include)) ( recursiveRemoveDir($include); ) else ( unlink( $incluir); ) ) rmdir($dir); ) //Eliminar el directorio tmp del directorio actual recursiveRemoveDir("tmp");
¿Cuáles son los problemas con este código?

En casos simples, se eliminará el directorio con todos los archivos adjuntos. Pero supongamos que tenemos un archivo oculto en nuestro directorio que comienza con un punto, por ejemplo, .htaccess. Función globo() es una sustitución global de UNIX que no implica archivos ocultos (DOTFILES) de forma predeterminada. Por ejemplo, si vamos a una terminal nix y usamos bash, nos encontraremos con el mismo problema (estamos hablando de archivos ocultos dentro del globo). Para resolver el problema en bash hay un comando shopt -s dotglob- permite la sustitución global archivos ocultos. En PHP, esto se puede resolver agregando un parámetro adicional GLOB_BRACE Para globo() y expandiendo el patrón desde el primer parámetro de la función.

$incluye = glob("tmp/(,.)*", GLOB_BRACE);
Y aquí también hay un problema: nos encontraremos con un ciclo infinito, ya que la matriz incluirá valores. y.. - que es el directorio actual y principal a nivel del sistema. Llegaremos a un bucle infinito (y no a eliminar todos los directorios principales), porque. en el marco de la ordenación por defecto en la matriz generada será el primero .. - es decir, cada vez que accederemos al mismo directorio. Para resolver el problema, formemos una matriz a partir de estos directorios del sistema y eliminemos sus índices de la matriz principal en un bucle. También está el tema de los enlaces simbólicos. Digamos que el directorio que se va a eliminar contiene un enlace a otro directorio, cuyo contenido no nos interesa en absoluto eliminar. Para resolver el problema, antes de crear una recursión, es necesario organizar una verificación de que la entidad no es un enlace.

Como resultado, la función toma la siguiente forma:

Función recursiveRemoveDir($dir) ( $incluye = glob($dir."/(,.)*", GLOB_BRACE); $systemDots = preg_grep("/\.+$/", $incluye); foreach ($systemDots as $índice => $punto) ( unset($incluye[$índice]); ) foreach ($incluye como $incluye) ( if(is_dir($include) && !is_link($include)) ( recursiveRemoveDir($include); ) else ( unlink($include); ) ) rmdir($dir); ) //Eliminar el directorio tmp del directorio actual recursiveRemoveDir("tmp");
El código funciona, pero de hecho podría haberse simplificado. En PHP, hay una clase FilesystemIterator, que ya tiene la configuración que necesitamos por defecto. La ruta al directorio cuyo listado necesitamos se pasa al constructor. Solo necesitamos crear un objeto.

Función recursiveRemoveDir($dir) ( $incluye = new FilesystemIterator($dir); foreach ($incluye as $include) ( if(is_dir($include) && !is_link($include)) ( recursiveRemoveDir($include); ) else ( unlink($include); ) ) rmdir($dir); ) //Eliminar el directorio tmp del directorio actual recursiveRemoveDir("tmp");
En conclusión, me gustaría señalar una más manera rápida. La corrección de su uso es muy dudosa: envíe un comando para que se ejecute en SHELL.

Sistema("rm -rf tmp");
Llamo su atención sobre el alto consumo de memoria y el hecho de que los administradores a menudo prohíben el uso de tales funciones en el servidor por motivos de seguridad.

Etiquetas: php, rmdir, global, recursividad

Las recomendaciones te ayudarán eliminar carpeta completamente a través de la línea de comando. En el artículo sobre, se utilizó el comando DEL, que está diseñado específicamente para archivos. En el caso de las carpetas, se aplican los comandos RD o RMDIR.

Para lograr el objetivo, . Introduzca RD /? y familiarícese brevemente con las características y parámetros del comando. Aquí verás solo 2 opciones:

  1. /s: al usar este prefijo, la carpeta se eliminará, así como todos los elementos anidados en ella. Si su directorio no está vacío y no configuró este parámetro, entonces no obtendrá nada.
  2. /Q: se usa al eliminar sin confirmación.

EN vista general la estructura se ve así:

RD o RMDIR /s/q “ruta completa de la carpeta”

Nota: al aplicar el diseño, el catálogo y su contenido se borrarán por completo de la computadora y no lo encontrarás en la papelera. Por seguridad, haz respaldo carpetas

Eliminar una carpeta con o sin confirmación

En mi computadora, creé un directorio llamado "cmd" y copié algunos objetos en él. A continuación, ingrese el siguiente comando en la línea de comando:

RD /s “c:\cmd”

Luego presioné Enter y la tecla Y, ya que cmd solicitó confirmación de la eliminación.

Revisando la unidad C, no encontré el directorio. Luego, creé una carpeta llamada "eliminar" y también copié 5 archivos, pero cuando ingresé el comando, eliminé el prefijo / s. Resultó así:

RMDIR "c:\borrar"

Después de presionar Enter, la eliminación no sucedió, pero en línea de comando Recibí un mensaje de que la carpeta no está vacía. Conclusión, sin la opción /s, solo puede eliminar una carpeta vacía, por lo tanto, usarlo sin este prefijo es prácticamente inútil.

Si le da pereza ingresar la letra de confirmación (Y o N), entonces la siguiente construcción es para usted. El prefijo /q se mencionó anteriormente, es él quien elimina la molesta entrada de letras (como prueba, vea la pantalla).

Equipo RMDIR tiene un sinonimo RD y está destinado a eliminar directorios del archivo sistemas Windows.

Formato de línea de comando:

RMDIR [unidad:]ruta

RD [unidad:]ruta

Opciones de la línea de comandos:

/S- Eliminación de un árbol de directorios, es decir, no solo el directorio especificado, sino también todos los archivos y subdirectorios que contiene.

/Q- Deshabilitar la solicitud de confirmación al eliminar un árbol de directorios usando una clave /S.

Ejemplos de uso de comandos RD (RMDIR)

Equipo RD no admite patrones de nombres de archivos y subdirectorios. Entonces, por ejemplo, tratando de ejecutar el comando R C:\Usuarios\*.*, terminará con un mensaje de error en el nombre del directorio. Sin embargo, se pueden especificar varias rutas de directorio como parámetros:

RD C:\Misdocs C:\Misprogs- elimine el contenido de las carpetas C:\Mydocs y C:\Myprogs.

RD C:\docs- elimine la carpeta C:\docs. Si el parámetro /S no está configurada, entonces la carpeta a ser eliminada C:\docs debería estar vacío.

RD /S /Q C:\Docs- eliminar la carpeta C:\Docs y todas sus subcarpetas sin pedir confirmación.

Característica de implementación del comando RD con un parámetro /S es que no solo se eliminarán los subdirectorios, sino el propio directorio C:\Docs, aunque hubiera archivos y no subcarpetas. Por lo tanto, para eliminar solo el contenido del directorio (cuando desee vaciar el directorio y no eliminarlo por completo), puede usar el siguiente truco: actualice el directorio que se elimina y ejecute el comando RD en relación con su contenido:

CD "Mi Carpeta"

RD /s/q "Mi carpeta"

El nombre del directorio que contiene espacios es doble comillas. Dado que el comando CD hizo que el directorio que se estaba borrando fuera el actual, su borrado no se realizará y la tecla /S eliminará todos los subdirectorios y archivos del directorio "Mi carpeta"

abajo esta el archivo por lotes elimina carpetas vacías en el directorio de archivos temporales especificado por el valor Variable ambiental TEMPERATURA. La lista de carpetas eliminadas se escribe en un archivo llamado c:\tempfoldersempty.txt

PARA /D %%i en (*) hacer (

RMDIR /Q %%~i && echo %%~i >> c:\tempfoldersempty.txt

Equipo MKDIR se utiliza para crear un directorio o subdirectorio. El comando tiene la siguiente sintaxis: MKDIR[unidad:]ruta. Como puede ver en la sintaxis del comando, se requiere el parámetro "ruta". Este parámetro especifica el nombre del directorio que se va a crear.

Por ejemplo, creemos una carpeta "MyFolder" en la unidad "C": mkdir MyFolder

Ahora eche un vistazo a la unidad "C". Si hizo todo correctamente, la carpeta "MyFolder" aparecerá en el directorio raíz. EN este caso hemos creado una carpeta en el directorio actual. Ahora vamos a crear una carpeta "MyFolder1" en la unidad "D": mkdir d:\MyFolder

Ahora en la unidad "D" hay una carpeta "MyFolder1"
Si es necesario crear un subdirectorio, se utilizan los mismos comandos, especificando todos los subdirectorios.
Por ejemplo, vamos a crear una carpeta "mundo", que se encuentra en la carpeta "hola", que a su vez se encuentra en la unidad "C": mkdir hola\mundo

Ahora, si vas a la unidad "C", verás la carpeta "hola" allí, y en esta carpeta la carpeta "mundo". De esta forma, puede crear subdirectorios, cuyo nivel de anidamiento está limitado únicamente por la cantidad de espacio en el disco duro.
El comando MKDIR no funcionará si intenta crear un directorio que ya existe en el directorio seleccionado.
Por ejemplo, creemos otra carpeta en la unidad "D" llamada "MyFolder1"

Equipo RMDIR elimina un directorio o subdirectorio. Sintaxis del comando: RMDIR[Q][unidad:]ruta.
Por ejemplo, eliminemos la carpeta creada anteriormente "MyFolder1" de la unidad "D": rmdir d:\MyFolder1

El comando RMDIR fallará si el directorio que se está eliminando contiene otros directorios o archivos.
Por ejemplo, eliminemos la carpeta "hola" de la unidad "C" (si recuerda, esta carpeta contiene otra carpeta "mundial"): rmdir hola
Para eliminar un directorio junto con todos los subdirectorios y archivos, use llaves o /Q
Al usar el modificador /S, el comando RMDIR eliminará el directorio junto con todo su contenido. Al eliminar, se mostrará un mensaje de confirmación de eliminación en la pantalla. rmdir /S hola

Se muestra un mensaje en la pantalla. Cuando presione la tecla "y", la carpeta "hola" se eliminará junto con todo el contenido.
La opción /Q desactiva la indicación para eliminar un directorio que no esté vacío: rmdir /S /Q hola

Tenga en cuenta que en este caso, se usan 2 teclas a la vez en un comando. El modificador /S le permite eliminar el directorio junto con todo su contenido, y el modificador /Q desactiva la solicitud de confirmación de eliminación.

El comando MKDIR se puede escribir como MD. Ambos comandos son similares entre sí y son abreviaturas del inglés. "hacer directorio" - crea un directorio.

El comando RMDIR se puede escribir como RD. Ambos comandos son similares entre sí y son abreviaturas del inglés. "eliminar directorio": elimina un directorio.

Eliminación de archivos en Linux- una tarea que no causa dificultades para usuarios experimentados. Nuestro artículo está enfocado, más bien, a los principiantes. En él, puede ver cómo eliminar archivos a través de la terminal y qué comandos son mejores para usar al hacerlo.

¿Por qué es mejor eliminar archivos de la consola? El caso es que esto proporciona una serie de ventajas y una mayor flexibilidad. Por ejemplo, usando un comando especial, puede eliminar fácil y completamente un archivo de disco duro sin posibilidad de recuperación. O con solo un comando y usando ciertos caracteres, condiciones o expresiones regulares, elimine cientos de archivos que no necesita en un directorio o subdirectorios que cumplan con algunos criterios.

Eliminar archivos en Linux: práctica

Linux tiene una utilidad rm estándar para eliminar archivos. Como es costumbre con utilidades estándar, hay una cierta idea en el nombre rm. En nuestro caso, estamos hablando de una abreviatura de la palabra inglesa Remove - delete.

Entonces, para eliminar un solo archivo, usamos el comando rm, seguido del nombre de nuestro archivo:

Si nuestro archivo no está en el directorio de trabajo actual, debemos especificar la ruta a su ubicación:

Rm /home/usuario/nombre de archivo

Sucede que el archivo está protegido contra escritura. Luego se nos pedirá que confirmemos el comando. Para eliminar un archivo en esta situación, simplemente escriba y y presione Entrar.

rm: ¿eliminar el archivo vacío regular protegido contra escritura "nombre de archivo"?

Si queremos eliminar varios archivos a la vez en Linux, entonces esto tampoco es un problema: usamos el comando rm, seguido de los nombres de nuestros archivos separados por un espacio:

rm nombre de archivo1 nombre de archivo2 nombre de archivo3

Otra opción es usar el comodín * y expresiones regulares para hacer coincidir ciertos archivos. Por ejemplo, podemos eliminar fácilmente todos los archivos en Linux que tengan una extensión .txt con el siguiente comando:

Para confirmar cada archivo antes de eliminarlo, use la opción -i:

rm -i nombre(s) de archivo

Pero cuando hay muchos archivos, y tiene plena confianza en la exactitud de su comando y no quiere responder a la pregunta del sistema cada vez, use la opción opuesta -f . Todos los archivos se eliminarán incondicionalmente, es decir, sin más preguntas:

rm -f nombre(s) de archivo

Eliminar carpetas y directorios en Linux

Si desea eliminar un directorio vacío, use la opción -d.

Si queremos eliminar un directorio no vacío y todos los archivos que se encuentran en él, procedemos de la siguiente manera:

De nuevo, en el caso de la protección contra escritura, sistema linux le preguntará al usuario si desea realizar la eliminación. Si queremos eliminar archivos y directorios que no estén vacíos sin más preámbulos, hacemos esto:

Cuando queremos eliminar varios directorios a la vez, usamos el comando rm, seguido de los nombres de los directorios separados por un espacio:

rm -r nombredirección1 nombredirección2 nombredirección3

Por cierto, aquí también podemos usar el comodín (*) y expresiones regulares que coincide con varios directorios.

conclusiones

Como puede ver, eliminar un archivo en Linux a través de la terminal no es nada difícil, por lo que todos pueden manejar esta operación. Al hacerlo, no solo debe comprender cómo usar correctamente el comando rm en Linux, sino también saber cómo hacerlo de manera segura.

Si nota un error, seleccione un fragmento de texto y presione Ctrl + Enter
COMPARTIR: