Tengo este siguiente código:
find ./ -iname '*phpmyadmin' -exec rm -rf {} \;
Elimina un directorio llamado phpmyadmin
, pero no elimina un archivo llamadophpMyAdmin-Version-XYZ.zip
Incluso si elimino el -rf
, todavía no lo eliminará (probablemente debido a un segundo problema con el -iname que no afecta la insensibilidad a mayúsculas y minúsculas).
- ¿Hay alguna forma de eliminar cualquier inodo en un único rm (archivo, directorio, softlink)?
- ¿Por qué agregar el
-iname
no tiene efecto?
Nota: No encontré un argumento de "eliminar ningún inodo" en man rm
.
find
admite, intente la-delete
acción. (Además, vea gnu.org/software/findutils/manual/html_node/find_html/… para una extensa discusión sobre las muchas formas de hacer esto incorrectamente.)Respuestas:
El problema es que está haciendo coincidir un archivo que termina
phpmyadmin
( sin distinción entre mayúsculas y minúsculas ) utilizando el patrón*phpmyadmin
. Para obtener cualquier archivo que contenga la cadenaphpmyadmin
(sin distinción entre mayúsculas y minúsculas), use-iname '*phpmyadmin*'
:Quizás obtener los archivos coincidentes antes de la eliminación sería sensato:
Para responder a su primera pregunta, no hay ninguna opción
rm
en el espacio de usuario para tratar los inodos.fuente
-depth
para quefind
no intente volver a aparecer en un directorio que acaba de eliminar.find
antes de agregar el-exec
parámetro. Muy peligroso.-exec rm -rf {} +
: no tiene sentido la penalización de rendimiento de ejecutar unorm
por archivo.Esto funciona incluso si alguien crea un directorio -phpmyadmin.
fuente
./
, por lo que no es necesario: se ejecutarárm -rf ./-phpmyadmin
, lo que debería funcionar con cualquier persona sensatarm
. Tratefind ./ -iname '*whatever*' -exec echo '{}' ';'
de probarfind */
lugar de hacerlofind .
, eso lo haría (si un nombre de directorio coincidente comenzara con un guión). Dicho esto, tendería a sugerir el uso--
para manejar tales casos proporcionando un final de opciones explícito antes del{}
argumento. (Ver # 10 en las pautas de sintaxis de la utilidad POSIX ){} +
es considerablemente más eficiente que{} \;
, ya que solo ejecutará tantas instancias de su comando (nuke
en este caso) como sea necesario para adaptarse a todos los elementos encontrados en la línea de comando, en lugar de uno por cada uno.find */
entonces el problema no ocurriría-exec
, el directorio con un guión parecería ser unafind
opción y se quejaría.