
Tengo más de 10.000 archivos que no tienen extensiones de versiones anteriores de Mac OS. Están extremadamente anidados en la estructura de archivos y también tienen todo tipo de formatos y caracteres extraños. Ya no tienen tipos de archivos ni códigos de creador adjuntos. Muchos de estos archivos tienen texto que me permitirá determinar las extensiones (por ejemplo, Word.Document.8 está en el texto de cada archivo creado por esa versión de Word).
Encontré un script que parece funcionar para uno de estos tipos de archivos a la vez, pero borra partes de los nombres de archivos después de caracteres nefastos, lo cual no es bueno.
find . -type f -not -name "*.*" -print0 |\
xargs -0 file |\
grep 'Word.Document.8' |\
sed 's/:.*//' |\
xargs -I % echo mv % %.doc
¿Debo limpiar primero los caracteres en los nombres de archivos o tratarlos mediante programación en el script para dejarlos igual? Mientras no pierda información de los nombres de archivos, no veo ningún problema al borrar barras y otros caracteres problemáticos. Además, si limpio los nombres de archivos, es probable que haya duplicados, por lo que cualquier script de limpieza tendría que agregar algo como "-1" antes de la extensión para asegurarse de que no se pierda nada.
No estoy atado a este guión, pero es comprensible, lo cual es un profesional. Mac OS X 10.6 está instalado en este servidor de archivos, pero tengo acceso a cualquier versión reciente de OS X.
Respuesta1
Todavía no estoy 100% seguro de haber entendido la pregunta, pero aquí hay un par de ideas.
sed 's/:.*//'
destruirá cualquier nombre de archivo que tenga dos puntos. ¿Los dos puntos son un carácter de nombre de archivo legal en Mac? Si no, entonces esto no será un problema para ti. De lo contrario, considere hacersed 's/: Word.Document.8$//'
o.sed 's/: [^:]*$//'
.- El
mv
comando generado porxargs
parece un problema. Intentar
xargs -I % sh -c 'echo mv "%" "%.doc"'
.
Respuesta2
La segunda pregunta es ¿cómo cambio el script para que busque más de un tipo de archivo al mismo tiempo y le dé a cada uno la extensión adecuada?
Aquí hay un par de consejos para comenzar:
sed -e '/Palabra\.Documento\.8/s/algo/algo más/;s/otro/aún otra/'\ -e '/Excel\.Hoja\.8/s/algo 2/algo más 2/;s/otros 2/otros 2 más/'\ ...
o
awk' /Palabra\.Documento\.8/ { comandos awk para Word } /Excel\.Hoja\.8/ { comandos awk para Excel } ⋮ '