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*.txt
eliminará todos los archivos en el directorio actual que tengan nombres que comiencen con la cadena file
y 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 find
comando para buscar cualquier archivo cuyo nombre coincida file*.txt
en el directorio actual y eliminarlo. La -maxdepth 1
opción restringe find
el 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*.txt
tampoco lo haría). Si desea asegurarse de eliminar solo archivos normales, utilice
find . -maxdepth 1 -type f -name 'file*.txt' -delete
Para find
implementaciones que no tienen opciones no estándar -delete
y/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 PATTERN
verifique 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,
rm
puedes hacer unls PATTERN
oecho PATTERN
y comprobar si la lista está bien.