Yo trabajo con una gran colección de la mayoría de los archivos de texto, subdividido por la serie, periódicamente reflejo de una aguas arriba del repositorio y el reenvasado de ellos usando un script de shell de un poco caótica organización de origen en más ordenada y compacta formas. Las fuentes se recogen en los directorios de los archivos para cada una de las series de numeración a partir de un puñado de cientos de personas por juego, con un semi-ordenada humano orientado a la convención de nomenclatura que se remonta a la década de los 90 con este patrón general:
multi-palabra-de serie-nombre de[-$subsetnumber]-$docnumber[.{txt,html,pdf}]
En el que una serie puede o no puede tener subconjuntos, los subconjuntos pueden ser numerados con números romanos o arábigos, una serie puede comenzar con numeradas docs en ningún subconjunto y luego obtener un subconjunto de la etiqueta "II" o "2", y así sucesivamente. Estos nombres funcionan bien para las personas que las usan desde el Finder, que en la mayoría de los casos las órdenes de ellos en una manera sensible y detecta que el nombre-II-1 llega más tarde de nombre-6 y ese nombre-2 no tiene nombre-19. Porque mi reenvasado consiste en el montaje de la versión más reciente de cada serie en un solo archivo en su orden racional, yo uso un simple bit de AppleScript que utiliza el Buscador para ordenar los nombres de los elementos en un determinado directorio. Esto produce resultados correctos, pero es espectacularmente ineficiente por razones que no entiendo. El AppleScript es:
on run argv
set op to ""
set upath to POSIX file argv as string
tell application "Finder"
set foo to every item of folder upath
set foo to sort foo by name
repeat with curfile in foo
set thisname to the name of curfile
set op to op & " " & thisname as string
end repeat
end tell
return op
end run
(Y no, no recuerdo por qué lo hice de esa manera. Me escribió alrededor del año 2008 y sobre todo me odio AppleScript...) Este es compilado en un script llamado "flista.scpt" y ejecutar desde mi script de shell con "osascript flista.scpt /ruta/a/serie/carpeta/". El resultado de ejecutar el script con un directorio que contiene 26 archivos es el de la vinculación del cpu por más de 2 minutos. Para la comparación, 'ls' da léxicamente resultados ordenados en la misma máquina (un G5 iMac con Leopard... no, no se rían, es una utilidad de la máquina) en 0.008 s con el guión de mascar en el mismo directorio en el fondo.
Yo estoy buscando para deshacerse de que AppleScript por completo, pero no he encontrado una manera de reproducir el Buscador de lógica de ordenación fácilmente, es decir, mediante el establecimiento de una configuración regional o dar algunos argumentos complejos para 'ordenar' que para los nombres correctamente. Mi solución alternativa si no puedo encontrar algo de lata para ello será reproducir el Buscador de la lógica de mí mismo en alguna mala mezcla de ordenar, sed, awk, y la cáscara, pero realmente me gustaría para evitar que, si es posible. Si hay algo goofy sobre mi AppleScript que está causando los estragos de rendimiento, la fijación de los que sería casi tan bueno como un conjuro mágico para 'ls' para que sea tipo como el Buscador.
ACTUALIZACIÓN: SOLUCIONADO! Probé por primera vez el Perl de Ordenación::Naturalmente módulo, pero ordenados de la etiqueta-subconjunto nombres por delante de la implícita subconjunto "yo" de los miembros, que no es lo que yo quería. Así que me fui por delante y se zambulló en la escritura de mi primer script en Ruby, después de hackear una corrección en el Leopard Ruby config para hacer 'joya' de trabajo en el mundo moderno y la instalación de la naturalsort joya. El reemplazo de Ruby script (llamado con un nombre de directorio como argumento) es:
#! /usr/bin/env ruby -rubygems -KU
# Largely cargo-culted from stackexchange response.
# I dunno what exactly the shebang line opts to ruby do. Probably pwn me.
# My first Ruby script ever. Don't laugh too hard.
require 'natural_sort' # gem install naturalsort
dname = ARGV[0]
input = Dir.entries(dname)
puts NaturalSort.naturalsort(input)
Las diferencias menores en la salida que esta incluye . y .. las entradas y delimita las entradas de línea en lugar de con espacios, pero como esta es la que se llama desde un script de shell que ya se filtra algunos de los nombres especiales estas son triviales para manejar.