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á eltmp
directorio.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 Selection
para obtener los otros archivos y luego eliminarlos. .fuente
ls
para 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 f
busca los nombres de todos los archivos en foo y sus subdirectorios y los imprime en STDOUT. Con la opción-print0
delimita los nombres de archivo con bytes NUL.grep -v -f bar
excluye todos los nombres de archivo que coinciden con una línea en la barra . Con la opción-z
trata su entrada como un conjunto de líneas delimitadas por el byte NUL, con la opción-Z
delimita su salida con un byte NUL.xargs rm
llamarm
repetidamente 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 {} +