Quiero eliminar todos los archivos en un directorio mientras dejo solo algunos archivos específicos, no tienen nada en común por su nombre. ¿Cómo podría lograr eso?
Por ejemplo, los nombres de archivo que quiero mantener son:
file_1.png` another_file.jpg`some_music.mp3
command-line
files
rm
AGamePlayer
fuente
fuente

shopt -u extglob).Haga un subdirectorio
tmp, mueva todos los archivos que desea mantener a ese directorio y luego haga lo siguienterm -f *. Eso no afectará eltmpdirectorio.Después de eso solo haz:
(Suponiendo que ninguno de los archivos que movió comienza con un punto).
Este es uno de los pocos casos en los que tiene sentido usar el mouse y un navegador de archivos como Nautilus, donde puedes hacer Ctrlclic en los pocos archivos que deseas conservar y luego usar el menú:
Edit -> Invert Selectionpara obtener los otros archivos y luego eliminarlos. .fuente
lspara ver si no se perdió ninguno de los archivos que desea conservar.Agregue los nombres de los archivos que desea conservar a un archivo de texto, uno por línea. Este archivo no debe estar en el directorio o también debe agregar su nombre.
Si el nombre de su directorio es foo y el nombre del archivo es bar , haga lo siguiente.
Esto hace lo siguiente:
find -type fbusca los nombres de todos los archivos en foo y sus subdirectorios y los imprime en STDOUT. Con la opción-print0delimita los nombres de archivo con bytes NUL.grep -v -f barexcluye todos los nombres de archivo que coinciden con una línea en la barra . Con la opción-ztrata su entrada como un conjunto de líneas delimitadas por el byte NUL, con la opción-Zdelimita su salida con un byte NUL.xargs rmllamarmrepetidamente para eliminar los archivos. Con la opción-0, trata su entrada como un conjunto de líneas delimitadas por el byte NUL.Esto funciona con nombres de archivos que contienen espacios en blanco.
fuente
find, preferiría hacerlofind . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -vi {} +