¿Cómo elimino con seguridad todos los archivos con una extensión específica (por ejemplo .bak) del directorio actual y todas las subcarpetas usando una línea de comandos? Simplemente, me da miedo usarlo rmya que lo usé mal una vez y ahora necesito consejos.
command-line
files
rm
batch
usuario216038
fuente
fuente

rm *.bak?rm *.bakno funcionará para subdirectorios.rm *.baksolo se eliminarán todos los archivos que terminen en .bak en el directorio actual. TO también hace cosas en subdirectorios que necesitabas para jugar con globos, usa la opción -r o usa el ejemplo de búsqueda.rm -r *.bak! También elimina directorios que terminan.bakcon todo su contenido.-deletesea el último argumento en su comando. Si lo pones antes del-name *.bakargumento, eliminará todo.fuente
-deletebandera defind. Se puede encontrar más información en la entrada de manuales de GNU para eliminar archivos con find .Primero ejecuta el comando
shopt -s globstar. Puede ejecutar eso en la línea de comando, y tendrá efecto solo en esa ventana de shell. Puedes ponerlo en tu.bashrc, y luego todos los proyectiles recién comenzados lo recogerán. El efecto de ese comando es hacer**/coincidir los archivos en el directorio actual y sus subdirectorios de forma recursiva (de forma predeterminada,**/significa lo mismo que*/: solo en los subdirectorios inmediatos). Entonces:(o
gvfs-trash **/*.bakque tienes)fuente
Para mí, eliminar archivos no es algo que deba usar
rm. Aquí hay una alternativa:Como dice Flimm en los comentarios:
Entonces:
No necesita hacer un alias para esto, porque el
trash-clipaquete proporciona un comandotrash, que hace lo que queremos.Como Eliah Kagan deja claro en comentarios extensos, también puede hacer que este uso sea recursivo
find. En ese caso, no puede usar un alias, por lo que los siguientes comandos suponen que lo ha instaladotrash-cli. Resumo los comentarios de Eliah:Este comando encuentra y muestra todos los
.bakarchivos y enlaces simbólicos en cualquier parte del directorio actual o sus subdirectorios o debajo.Para eliminarlos, agregue un
-execcon eltrashcomando:-xtype fselecciona archivos y enlaces simbólicos a archivos, pero no carpetas. Para eliminar también las carpetas .bak, elimine esa parte y use-execdir, lo que evitacannot trash non-existenterrores para los.bakarchivos dentro de los.bakdirectorios:fuente
rmpara eliminar cosas" es una declaración controvertida, pero tengo que estar de acuerdo en que a menudo es más inteligente usar algo que te permita deshacer cosas.trash-clihace lo mismo quegvfs-trashsin la dependencia degvfs.find . -name "*.bak" -type fmuestra lo que setrash *.bakelimina. ¿Eso es realmente lo que quieres decir? Puede mover directorios a la papelera contrashogvfs-trash, perotrash *.baksolo moverá archivos y directorios cuyos nombres terminen en.baky que residan inmediatamente en el directorio actual. El shell se expande*.bak, portrash *.baklo que no afectará a los.bakarchivos en subdirectorios que no tengan nombre.bak.ls *.bak(que creo que quieres decir) enumera quétrash *.bakbasura.find . -name '*.bak' -xtype f -exec trash {} +destruye todos los.bakarchivos en cualquier lugar debajo.. No puede usar un alias, así que instaletrash-clio escriba en sugvfs-trashlugar. Aquí hay un ejemplo.-xtype fselecciona archivos y enlaces simbólicos a archivos, pero no carpetas. Para eliminar.bakcarpetas también, usefind . -name '*.bak' -execdir trash {} +, lo que evitacannot trash non existenterrores para los.bakarchivos dentro de los.bakdirectorios. Por favor, siéntase libre de usar todo esto en su respuesta.Si desea eliminar todos los archivos de cierto tipo, pero solo 1 carpeta "profunda" de la carpeta actual:
-maxdepth 2 porque el directorio actual " . " cuenta como la primera carpeta.
fuente
Respuesta rápida:
Elimine todos los archivos con el nombre considerado o postfix de forma recursiva:
find . -name '*.pyc' -type f -deleteElimine todos los directorios con el nombre considerado de forma recursiva:
Algo menos estrictamente controlado, pero en una sola línea:
[ NOTA ]:
des la opción de directorio yfes la opción de archivo.fuente
Si está dentro de un repositorio de git, puede usar:
Esto elimina archivos no rastreados y archivos en .gitignore.
fuente