Buscar resultados duplicados

Tengo un script que busca archivos en un dispositivo de archivado masivo. Todos los días, busca alrededor de 250,000 archivos y crea un informe simple que cuenta cuántos archivos recibimos, desglosados ​​por remitente ($1) y por fecha ($11).

Para fines de eficiencia, utilizo el ‑exec con un signo más en mi expresión find() para capturar nombres de archivos en grupos.

find . -exec ls '{}' +| awk -F~ '{print $1"\t"$11}'|sort|uniq -c

Funciona rápido pero duplica los resultados así.

  9632 ./Reynosa    20120607
   9632 Reynosa 20120607
  20328 ./Reynosa   20120608
  20328 Reynosa 20120608
  15354 ./Reynosa   20120609
  15354 Reynosa 20120609

¿Qué estoy haciendo mal? debo usar basename para quitar el ./ ¿O hay un mejor camino?

preguntado el 12 de junio de 12 a las 22:06

Muestre un ejemplo de salida del find porción de la tubería sola. ¿Por qué no? -print haz lo que quieras en lugar de -exec ls? -

2 Respuestas

Trata ls -d en lugar de ls. Desde la página de manual:

-d, --directory
          list directory entries instead of contents, and do not  dereference symbolic links

Su comando actual también enumera las entradas de los directorios, que luego se enumeran nuevamente por búsqueda, lo que da como resultado duplicados.

Respondido el 12 de junio de 12 a las 22:06

Gracias por tu ayuda. Utilizando ls -d consiguió lo que quería. Aceptado y votado. - Chris

deberías usar -type f en find como en

 find . -type f -exec ....

Respondido el 12 de junio de 12 a las 23:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.