¿Cómo elimino todos los archivos que coinciden con un patrón?

76

Cuando revierto en Mercurial, deja varios .origarchivos. Me gustaría poder ejecutar un comando para eliminarlos a todos.

He encontrado algunas fuentes que dicen ejecutar:

rm **/*.orig

Pero eso me da el mensaje:

rm: no se puede eliminar `* / .orig ': no ​​existe tal archivo o directorio

También he intentado:

  • rm -rv *.orig

  • rm -R *\.orig

JD Isaacks
fuente
Echar un vistazo a superuser.com/a/699287/92334
LU55

Respuestas:

149

Usa el findcomando (¡con cuidado!)

find . -name '*.orig' #-delete

He comentado el comando de eliminación, pero una vez que esté satisfecho con lo que coincide, simplemente elimine el #de la línea y debería eliminar todos esos archivos.

Oli
fuente
¿Funciona eso recursivamente?
Frank Barcenas
2
@FrankBarcenas Sí, find hace todo de forma recursiva. Si quieres limitar cómo funciona, puedes jugar con los argumentos -maxdeptho -mindepth.
Oli
66
Definitivamente deja -deleteal final de las banderas. find . -delete -name '*.orig'ignorará el filtro y golpeará todo su directorio.
Michael
1
@Michael, sí. Ya resolví el problema congit clean -fdx
kyb
1
@kamal yo probablemente todavía uso de encontrar, pero con sus -regexo -iregexpredicados. Analizar los nombres de archivos (cuando los está canalizando) puede ser difícil de hacer de manera segura a veces.
Oli
6

"find" tiene algunas técnicas muy avanzadas para buscar en todos los directorios y archivos rm actuales o actuales.

find ./ -name ".orig" -exec rm -rf {} \;
usuario2038042
fuente
3
¿Cuál es el beneficio sobre el uso -delete?
muru
@muru Supongo que obtendría un mensaje para cada archivo si elimina -rf.
Peter
@Peter no necesariamente. Incluso entonces, entonces? La respuesta usa -rf, y findtiene -ok.
muru
@muru parece que -delete no elimina carpetas
Andrii Karaivanskyi
@AndriiKaraivanskyi a menos que la eliminación haya fallado, lo hace.
muru
1

He eliminado todos los archivos que comienzan con .nfs000000000 como este

rm .nfs000000000*
Taras Vaskiv
fuente