find
es muy útil para realizar acciones selectivas en un árbol completo.
find . -type f -name ".Apple*" -delete
Aquí, -type f
se asegura de que sea un archivo, no un directorio, y puede que no sea exactamente lo que desea, ya que también omitirá enlaces simbólicos, sockets y otras cosas. Puede usar ! -type d
, lo que literalmente significa no directorios, pero también puede eliminar caracteres y bloquear dispositivos. Sugeriría mirar el -type
predicado en la página del manual para find
.
Para hacerlo estrictamente con un comodín, necesita soporte avanzado de shell. Bash v4 tiene la globstar
opción , que le permite unir recursivamente subdirectorios utilizando **
. zsh
y ksh
también es compatible con este patrón. Usando eso, puedes hacerlo rm -rf **/.Apple*
. Este no es el estándar POSIX y no es muy portátil, por lo que evitaría usarlo en un script, pero para una acción de shell interactiva única, está bien.
find . -type d -name .Apple*
a trabajar: enumera todas las carpetas. Sin embargo, falla cuando agrego-delete
al final. Simplemente vuelve con el resumen de uso. Se ejecuta en BusyBox v1.1.1. Eso hace una diferencia?-delete
tampoco es POSIX.**
fue introducido porzsh
a principios de los 90. Ahora está (por orden cronológico de aparición) también en ksh93, fish, bash y tcsh.rm -rf **/.Apple*
-delete
no funciona, use-exec rm -f {} +
en su lugar.find
a ser detallado cuando se elimina? Supongo que el método "globstar" haría esto agregando el-v
interruptor.Me encontré con problemas usando
find
con-delete
debido al comportamiento intencional defind
(es decir, negarse a eliminar si la ruta se inicia con ./, lo que hacen en mi caso) como se indica en su página de manual:En cambio, solo pude hacer
Para su caso, parece que citar el globo (asterisco, *) fue la solución, pero quería proporcionar mi respuesta en caso de que alguien más tuviera el mismo problema.
NOTA: Anteriormente, mi respuesta era hacer lo siguiente, pero @Wildcard señaló las fallas de seguridad al hacerlo en los comentarios.
fuente
xargs
aquí.-exec rm -r {} \;
o, mejor,-exec rm -r {} +
lo hará también sin fallar en los nombres de archivos de caracteres especiales. Ver ¿Por qué es una mala práctica la salida de find?mkdir -p $'blah\nDocuments\n/etc\n/home\n/received__output'
en su directorio y luego ejecute el mismo comando nuevamente, si no cree que exista la posibilidad de pérdida de datos. O bien, dado que la cuestión es sobre Mac OS,mkdir -p $'blah\nDocuments\n/Users\n/Applications\n/received__output'
. ( Advertencia: eliminarás todos tus archivos si haces esto. Ese es mi punto.)Lo que es posible es que no haya nada de malo en su comando rm / find, pero que el usuario con el que ha iniciado sesión no tiene permisos de eliminación. Úselo
ls -l
para enumerar cosas con sus permisos, y puede identificar quién es usted con los comandosid
ygroups
(cualquiera de los dos debería estar disponible). Si usted es el "usuario incorrecto" para hacer esto, deberá cambiar los permisos / propiedad de los archivos o cambiar a otro usuario.fuente
Tratar:
fuente
dotglob
Es inútil aquí. Vea esta página para ver un ejemplo de lo que hace dotglob.Comando simple:
¡Buena suerte!
fuente