Eliminar todos los archivos en una carpeta aparte de uno usando OS X Terminal

1

Me gustaría eliminar todo el contenido de una carpeta, aparte de un archivo. El problema es que no se puede copiar el archivo a otra carpeta y luego volver a la primera carpeta, porque entonces la aplicación no acepta el archivo, por lo que el único archivo debe permanecer en la carpeta.

¿Existe un comando como el que describí?

    
pregunta user121028 06.07.2015 - 09:39

2 respuestas

4

Lo haría así:

find . ! -name <filename> -delete

para que esto funcione con carpetas, debes reemplazar el delete con un exec rm -r

find . ! -name <filename> -exec rm -rv {} \;

Esto se descompone en

find = buscar

. = en el directorio de trabajo actual, puede reemplazar . con una ruta, como ~/Documents/

! = not

-name = nombre

<filename> = archivo

-exec = ejecutar

rm -rv = eliminación detallada

{} = resultados del hallazgo

\; = cerrar la ejecución

Encuentre todos los archivos y carpetas en su carpeta de trabajo, que no tengan el nombre filename y luego ejecute el comando eliminar en los resultados.

Primero debes hacer una ejecución en seco sin la opción de eliminar:

find . ! -name <filename>

Este comando le proporciona una lista de todos los archivos y carpetas en su directorio de trabajo que no se denominan <filename> . Al agregar -delete o -exec rm -rv {} \; , se eliminarán estos archivos y la carpeta (la versión exec ).

También puedes usar

rm -v [^filename]

para carpetas agrega -r

rm -rv [^filename]

De alguna manera me siento más cómodo usando la opción find . Principalmente porque puedes hacer una carrera en seco. De cualquier manera, comenzaría con una carpeta ficticia y probaría ambas opciones.

    
respondido por el Volsk 06.07.2015 - 09:49
0

Para estar realmente seguro de esto, puede usar find para crear un script de eliminación con comandos "rm":

find . ! -name "<filename>" -exec echo "rm -rf {}" >> /tmp/rm.sh \;

Elimina todas las líneas en el script de script /tmp/rm.sh que no te gusten, luego ejecútalo por

bash /tmp/rm.sh

Pero ten cuidado, ¡encuentra también encuentra directorios y "rm -rf" luego los eliminaría recursivamente también! Limite su búsqueda diciendo que busque el tipo de archivo que desea buscar:

find . ! -name "<filename>" -type <filetype> -exec echo "rm -rf {}" >> /tmp/rm.sh \;

¡Diviértete! :-)

    
respondido por el Garex 06.07.2015 - 10:25

Lea otras preguntas en las etiquetas