Quiero eliminar todos los archivos en el árbol de directorios actual, excepto aquellos en save
. Ejecuté este comando:
find . \( -name save -prune \) -o -type f -ls | grep /save/
y no encontró ninguno. Pero cuando ejecuté este comando:
find . \( -name save -prune \) -o -type f -delete
Todos esos archivos en / save / desaparecieron. ¿Qué me estoy perdiendo?
mv save/ ../some/safer/location
antes de un comando de eliminación "genérico" (... pero, por supuesto, antes de su publicación, habría hecho la misma verificación y me encontré con el mismo problema). Ahora ve a buscar un buen "recuperar" para el sistema de archivos donde estaban los archivos ^^Respuestas:
-delete
implica-depth
que no funciona con-prune
(-depth
comienza con las hojas). Hay una advertencia al respecto en el manual de la versión de GNU (-delete
es una extensión de FreeBSD que ahora también es compatible con GNUfind
y algunas otras implementaciones).Aquí, tienes la opción de usar en su
rm
lugar:(potencialmente inseguro si hay un directorio que otros puedan escribir allí, ya que uno podría hacer que elimine archivos fuera del árbol de directorios actual al reemplazar los directorios con enlaces simbólicos mientras ejecuta ese comando).
Una alternativa más segura:
Eso no tiene el problema mencionado anteriormente, pero significa ejecutar uno
rm
por archivo. El--
es necesario para la implementación de FreeBSD, no el GNU que prefija los nombres de archivo./
.Alternativamente, como lo sugiere Costas:
(pero eso aún desciende innecesariamente en
save
directorios)El
LC_ALL=C
está allí, por lo que*
coincide con cualquier secuencia de bytes (incluso aquellos que no forman caracteres válidos en la configuración regional actual). Tenga en cuenta que afectará el idioma de los mensajes de error (inglés en lugar del idioma del usuario).fuente
rm
?