¿Cómo elimino de forma segura todos los archivos con una extensión específica (p. ej. .bak
) desde el directorio actual y todas las subcarpetas usando una línea de comandos? Simplemente, tengo miedo de usar rm
ya que una vez lo usé mal y ahora necesito un consejo.
Ni siquiera necesitas usar rm
en este caso, si tienes miedo. Utilizar find
:
find . -name "*.bak" -type f -delete
Pero úsalo con precaución. Corre primero:
find . -name "*.bak" -type f
para ver exactamente qué archivos eliminará.
También, asegúrese de que -delete
es el último argumento a sus órdenes. Si lo pones antes de la -name *.bak argument
, eliminará todo.
Ver man find
y man rm
para obtener más información y ver también esta pregunta relacionada en SE:
< código>buscar . -nombre "*.bak " - tipo f-print0 / xargs -0 / bin / rm-f
Primero ejecute el comando shopt -s globstar
. Puede ejecutar eso en la línea de comandos, y tendrá efecto solo en esa ventana de shell. Puedes ponerlo en tu .bashrc
, y luego todos los proyectiles recién iniciados lo recogerán. El efecto de ese comando es hacer **/
haga coincidir los archivos del directorio actual y sus subdirectorios de forma recursiva (de forma predeterminada, **/
significa lo mismo que */
: solo en los subdirectorios inmediatos). Entonces:
rm **/*.bak
(o gvfs-trash **/*.bak
o lo que sea).
Eliminar archivos para mí no es algo que debas usar rm
para. Aquí hay una alternativa:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trashalias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without aliastrash *.bak # trash the files (thus moving them to the trash bin)
Como afirma Flimm en los comentarios:
Paquete
trash-cli
hace lo mismo quegvfs-trash
sin la dependencia de gvfs.
Tan:
sudo apt-get install trash-cli
No es necesario crear un alias para esto, porque el trash-cli
el paquete proporciona un comando trash
, que hace lo que queremos.
Como Eliah Kagan deja en claro en extensos comentarios, también puede hacer que esto sea recursivo usando find
. En ese caso, no puede usar un alias, por lo que los comandos a continuación asumen que ha instalado trash-cli
. Resumo los comentarios de Elías:
Este comando busca y muestra todos los .bak
archivos y enlaces simbólicos en cualquier lugar del directorio actual o sus subdirectorios o debajo.
find . -name '*.bak' -xtype f
Para eliminarlos, agregue un -exec
con el trash
comando:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
selecciona archivos y enlaces simbólicos a archivos, pero no carpetas. Eliminar .carpetas bak también, elimine esa parte y use -execdir
, lo que evita cannot trash non-existent
errores para .bak
archivos en el interior .bak
Directory:
find . -name '*.bak' -execdir trash {} +
Si desea eliminar todos los archivos de un tipo determinado, pero solo 1 carpeta "profunda" de la carpeta actual:
find . -maxdepth 2 -name "*.log" -type f -delete
- profundidad máxima 2 porque el directorio actual "."cuenta como la primera carpeta.
Respuesta Rápida:
-
Elimine todos los archivos con el nombre o el sufijo considerados de forma recursiva:
find . -name '*.pyc' -type f -delete
-
Elimine todos los directorios con el nombre considerado de forma recursiva:
find ~ -path '*/__pycache__/*' -deletefind ~ -type d -name '__pycache__' -empty -delete
Algo menos controlado, pero en una sola línea:
find ~ -path '*/__pycache__*' -delete
[NOTA]:
d
es la opción de directorio y f
es la opción de archivo.
Puede enumerar todos los archivos con esa extensión primero antes de usar rm
Por ejemplo,
ls *.bak
Si obtiene solo los archivos que desea eliminar, puede usar el rm
rm *.bak
Si en caso de que desee verificar la lista antes de eliminar los archivos, puede hacer eco de ella.
find . -name "*.bak" -type f | xargs echo rm -rf
Esto mostrará una lista de los resultados de búsqueda que se canalizan al comando rm a través de xargs.Una vez que esté seguro de la lista, puede soltar el eco en el comando anterior.
find . -name "*.bak" -type f | xargs rm -rf