Comando de terminal para eliminar todos los archivos nombrados excepto uno

2

En Terminal.app , ¿cómo puedo eliminar todos los archivos con un nombre determinado, excepto una extensión? Por ejemplo si tengo:

File.docx
File.ppt
File.pdf
File.xlsx
File.out
File.app
FIle.otherextension
File2.docx
File2.ppt
File2.pdf
File2.xlsx
File2.out
File2.app
FIle2.otherextension

todo en un directorio, ¿cómo puedo eliminar todos los File unos excepto File.out ?

Salida esperada de ls al final:

File.out
File2.docx
File2.ppt
File2.pdf
File2.xlsx
File2.out
File2.app
FIle2.otherextension
    
pregunta Michael Link 05.07.2018 - 17:56

3 respuestas

1

Lo siguiente eliminará todos los archivos llamados File (y solo aquellos) dentro de la carpeta actual, excepto los que tengan la extensión .out :

find . -type f \( -iname "File.*" ! -iname "*.out" \) -delete -maxdepth 1

Si desea realizar esta operación recursivamente (atravesando todas las subcarpetas), elimine -maxdepth 1 :

find . -type f \( -iname "File.*" ! -iname "*.out" \) -delete

El nombre i en - i realiza una búsqueda sin distinción de mayúsculas, por lo que también se eliminarán file.* , FILE.* , etc. Del mismo modo, file.OUT se salvaría.

    
respondido por el user11633 05.07.2018 - 18:47
1

Prueba esto:

ls File.* | fgrep -v .out | xargs rm

Esto corresponde a su descripción: seleccione todos los archivos con el nombre File con alguna extensión, elimine el archivo con la extensión .out de la lista y elimine los demás.

    
respondido por el lhf 08.07.2018 - 04:13
0

Usando el globo extendido de ksh .

rm !(*.out|File2.*|FIle2.*)

Lo que dice en palabras: elimine los archivos que no terminan en .out o que empiecen con File2. o que empiecen con FIle2.

ksh extended glob también está disponible en bash . Debes activar la opción con shopt -s extglob . Esta solución fallará si superas ARG_MAX.

Asegúrese de estar en el directorio donde existen estos archivos o podría eliminarlos involuntariamente.

    
respondido por el fd0 05.07.2018 - 18:29

Lea otras preguntas en las etiquetas