localizar archivos con nombres similares

localizar archivos con nombres similares

Estoy ejecutando OS X 10.7.3. Me gustaría localizar todos los archivos que tienen cadenas comunes en sus nombres.

Tengo una carpeta que contiene varios archivos cuyos nombres son iguales excepto por el prefijo. Por ejemplo:

003 - Eclipse solar.mp3
008 - Hermoso día.mp3
027 - Eclipse solar.mp3
103 - Rolling Hills.mp3
244 - Rolling Hills.mp3

De esa lista me gustaría filtrar cualquier entidad con nombres "completamente únicos", en este caso: 008 - Beautiful Day.mp3

¿Existe un cliente GUI, un script de automatización o un comando de terminal que haga eso?

¡Muchas gracias!

Respuesta1

ls | cut -b 6- | sort | uniq -c | sort -r

esto corta los prefijos y muestra cuantas veces se "duplica" el archivo

Respuesta2

Esto imprimirá una lista de los nombres de archivos sin el prefijo:

awk -F ' - ' '{counts[$2]++; names[$0]} END {for (item in counts) {if (counts[item] > 1) {print item}}}' < <(printf '%s\n' *)

Salida de ejemplo:

Solar Eclipse.mp3
Rolling Hills.mp3

Para imprimir el nombre completo de cada archivo:

awk -F ' - ' '{counts[$2]++; names[$0]} END {for (name in names) {split(name, parts, / - /); if (counts[parts[2]] > 1) {print name}}}' < <(printf '%s\n' *)

Salida de ejemplo:

027 - Solar Eclipse.mp3
003 - Solar Eclipse.mp3
244 - Rolling Hills.mp3
103 - Rolling Hills.mp3

No se garantiza que el orden de los archivos en la salida esté agrupado (aunque sí lo está en este ejemplo simple. Si tiene GNU AWK ( gawk), puede agrupar la salida:

awk -F ' - ' '
    {
        counts[$2]++;
        names[++c] = $2 " - " $1
    }
    END {
        num = asort(names);
        for (i = 1; i <= num; i++) {
            split(names[i], indices, / - /)
            if (counts[indices[1]] > 1) {
                print indices[2] " - " indices[1]
            }
        }
    }
' < <(printf '%s\n' *)

Si no tienes gawk, puedes usar sort:

awk ... | sort -k3,3

En lugar de printfutilizar la sustitución de procesos, puede canalizarlo al script AWK. O puede usarlo finden una tubería o mediante sustitución de procesos si desea hacerlo de forma recursiva. Si desea una ejecución recursiva para comparar nombres de archivos globalmente, deberá eliminar los nombres de directorio que findse generan de forma predeterminada.

información relacionada