¿Cómo eliminar muchos archivos con nombres similares?

¿Cómo eliminar muchos archivos con nombres similares?

Tengo muchos archivos txt, llamados como file1.txt file2.txt file3.txt ... file1000.txt ¿Cómo puedo eliminar todos estos archivos? Soy nuevo en Unix y me preocupa eliminar accidentalmente otros archivos de mi directorio.

He mirado otras preguntas pero no estoy seguro, ¿podría hacer algo como

rm -v !("differentfile"|"anotherfile"|"otherfile"|"finalfile") 

y por lo tanto borrar todos mis archivos con el mismo nombre y solo números diferentes y conservar los pocos que quiero? Y esta línea solo debería eliminar archivos en mi directorio/carpeta de trabajo, ¿correcto?

¿Hay alguna manera de usar rm pero solo especificar los archivos que quiero eliminar todos a la vez?

Respuesta1

rm file*.txteliminará todos los archivos en el directorio actual que tengan nombres que comiencen con la cadena filey terminen con la cadena .txt.

Si haymuchosde estos, obtendrá el error "Lista de argumentos demasiado larga". En este caso, puede utilizar

find . -maxdepth 1 -name 'file*.txt' -delete

en cambio.

Esto utilizará el findcomando para buscar cualquier archivo cuyo nombre coincida file*.txten el directorio actual y eliminarlo. La -maxdepth 1opción restringe findel ingreso a cualquier subdirectorio que no sea .(el directorio actual).

El comando no hace una diferencia entre archivos y directorios (al igual que rm file*.txttampoco lo haría). Si desea asegurarse de eliminar solo archivos normales, utilice

find . -maxdepth 1 -type f -name 'file*.txt' -delete

Para findimplementaciones que no tienen opciones no estándar -deletey/o -maxdepth, utilice

find . ! -path . -prune -type f -name 'file*.txt' -exec rm -f {} +

O bien, podrías simplemente recurrir a un bucle simple pero lento:

for name in file*.txt; do
    rm -f "$name"
done

Respuesta2

Si no hay otros archivos con la misma estructura, utilice el llamado globbing con el prefijo 'archivo'. Un asterisco significa cualquier otra cadena (incluida la cadena vacía). Verifique primero con 'ls' (lista) en lugar de 'rm':

ls file*.txt

También puede limitar esto a al menos un número después de "archivo" y cualquier otra cosa después:

ls file[[:digit:]]*.txt

Respuesta3

Si no está seguro de si su patrón incluirá otros archivos, podría, por ejemplo:

  • muévalos a otra carpeta (temporal) y mv PATTERNverifique la lista de archivos y, si todo está bien, elimine la carpeta temporal.

  • usar rm -i PATTERN. Tendrás que confirmar cada eliminación manualmente.

  • Antes de hacerlo, rmpuedes hacer un ls PATTERNo echo PATTERNy comprobar si la lista está bien.

información relacionada