Tengo archivos fileName_1 , fileName_2 ... fileName_100000 donde los fileNames están numerados secuencialmente. ¿Cómo puedo eliminar los archivos de índice mayor que, digamos 100 ?
command-line
teaLeef
fuente
fuente
{x..y}
a toda la lista. Por ejemplo, si lo usaecho test{1..3}
, se expandiráecho test1 test2 test3
y luego se ejecutará. Como puede ver, se imprimetest1 test2 test3
. Del mismo modo, si el{x..y}
no está conectado a ningún argumento, solo pondrá los números allí. Por ejemploecho test {1..3}
, solo imprimirátest 1 2 3
.exec
llamada impone un límite al número de argumentos que puede tener un proceso. Puedes recuperarlo congetconf ARG_MAX
. Por ejemplo, en mi sistema es2097152
(~ 2.1 millones). Esto significa querm
(que no está integrado) fallará con más de esa cantidad de archivos. Los comandos integrados no tienen este problema, y tampoco las otras soluciones propuestas.Puedes probar este comando también,
Eliminará todos los archivos (rangos de 100 a 100000) si el nombre del archivo contiene números en orden secuencial.
fuente
En general, tiene varias formas de lograr esto:
será expandido por el shell en aproximadamente 100,000 nombres de archivo. Si el nombre base es una ruta larga y el número es lo suficientemente alto, puede superar la longitud máxima de una línea de comando con este enfoque.
El
for
bucleno sufre este problema, pero es una forma relativamente lenta de eliminar los archivos, ya que el shell tiene que realizar la sustitución de variables y ejecutar rm aproximadamente 100,000 veces.
Ambos métodos anteriores pueden causar advertencias si
filename_101
faltan algunos de los archivos .Por lo general, las soluciones basadas en
find
son mejores, ya que solo funcionan en archivos que realmente están allí (durante el descubrimiento). Sin embargo, hay algunas diferencias sutiles:se sigue en marcha el
rm
programa de aproximadamente 100.000 veces, mientras que la sustitución de la final\;
por+
tratará de minimizar el número de subprocesos. Es probable que ambos métodos sean (mucho o un poco) más lentos que los-delete
que no utilizan comandos externos, sino que invocan llamadas del sistema.Sin embargo, siempre verifique primero si el patrón realmente coincide con los archivos a los que desea apuntar:
Entonces, en este caso, eliminaría un archivo que deseaba conservar y dejaría los archivos que deberían haberse eliminado.
fuente
Use el siguiente comando:
Eso eliminará archivos de 100 a 100000.
Más información: Sitio
fuente
+
lugar de\;
... mira aquí . O, mejor aún, use el-delete
comando find .[100-100000]
clase de caracteres solo coincide con un solo carácter, por lo que solo puede coincidir con 0 o 1.