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 printf
utilizar la sustitución de procesos, puede canalizarlo al script AWK. O puede usarlo find
en 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 find
se generan de forma predeterminada.