¿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 rm
ya que lo usé mal una vez y ahora necesito consejos.
command-line
files
rm
batch
usuario216038
fuente
fuente
rm *.bak
?rm *.bak
no funcionará para subdirectorios.rm *.bak
solo 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.bak
con todo su contenido.-delete
sea el último argumento en su comando. Si lo pones antes del-name *.bak
argumento, eliminará todo.fuente
-delete
bandera 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 **/*.bak
que 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-cli
paquete 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
.bak
archivos y enlaces simbólicos en cualquier parte del directorio actual o sus subdirectorios o debajo.Para eliminarlos, agregue un
-exec
con eltrash
comando:-xtype f
selecciona 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-existent
errores para los.bak
archivos dentro de los.bak
directorios:fuente
rm
para 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-cli
hace lo mismo quegvfs-trash
sin la dependencia degvfs
.find . -name "*.bak" -type f
muestra lo que setrash *.bak
elimina. ¿Eso es realmente lo que quieres decir? Puede mover directorios a la papelera contrash
ogvfs-trash
, perotrash *.bak
solo moverá archivos y directorios cuyos nombres terminen en.bak
y que residan inmediatamente en el directorio actual. El shell se expande*.bak
, portrash *.bak
lo que no afectará a los.bak
archivos en subdirectorios que no tengan nombre.bak
.ls *.bak
(que creo que quieres decir) enumera quétrash *.bak
basura.find . -name '*.bak' -xtype f -exec trash {} +
destruye todos los.bak
archivos en cualquier lugar debajo.
. No puede usar un alias, así que instaletrash-cli
o escriba en sugvfs-trash
lugar. Aquí hay un ejemplo.-xtype f
selecciona archivos y enlaces simbólicos a archivos, pero no carpetas. Para eliminar.bak
carpetas también, usefind . -name '*.bak' -execdir trash {} +
, lo que evitacannot trash non existent
errores para los.bak
archivos dentro de los.bak
directorios. 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 -delete
Elimine todos los directorios con el nombre considerado de forma recursiva:
Algo menos estrictamente controlado, pero en una sola línea:
[ NOTA ]:
d
es la opción de directorio yf
es 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