2010-12-10 50 views
3

Je voudrais renommer un fichier linux en un nom de fichier qui est légal dans Windows. Il ne devrait pas être plus long que ce qui est autorisé et ne devrait pas avoir de caractères qui ne sont pas autorisés dans les fenêtres. Parfois, je copier le titre de papiers à un nom de fichier et ils ont des caractères spéciaux tels que , ® ou ?Renommage automatique des noms de fichiers linux en un nouveau nom de fichier qui est légal dans les fenêtres

De plus il y a il y a une sorte de personnages parfois aux extrémités des lignes générées lors de la copie et coller un titre de un pdf. Vous pouvez les voir lors de l'utilisation sed -n 'l':

echo 'Estrogen receptor agonists and estrogen attenuate TNF-α induced 
α 
apoptosis in VSC4.1 motoneurons.pdf' | sed -n 'l' 
Estrogen receptor agonists and estrogen attenuate TNF-\316\261 induce\ 
d$ 
\316\261$ 
apoptosis in VSC4.1 motoneurons.pdf$ 

ou

echo 'A synthetic review of the five molecular Sorlie’s subtypes in 
breast cancer' | sed -n 'l' 
A synthetic review of the \357\254\201ve molecular Sorlie\342\200\231\ 
s subtypes in$ 
breast cancer$ 

J'ai commencé un script, mais il est pas élégant et incomplet. Est-ce que quelqu'un a déjà fait quelque chose comme ça ou existe-t-il un moyen rapide et élégant de le faire?

fn2win="$1" 
testFn=$(echo "$fn2win" | sed -n 'l') 
#SPEC_CHAR="ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞàáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿ" 
#NORM_CHAR="AAAAAACEEEEIIIIDNOOOOOOUUUUYPaaaaaaceeeeiiiionoooooouuuuyby" 
#SPEC_LOW_CHAR="aàáâãäåāăąbḃcćçčĉċdḑďḋđeèéěêëēĕęėfḟƒgǵģǧĝğġǥhĥħiìíîĩïīĭįıjĵkḱķǩlĺļľłmṁnńņňñoòóôõöōŏøpṗqrŕŗřsśşšŝṡſtţťṫŧuùúûũüůūŭųvwẁẃŵẅxyỳýŷÿzźžż" 
#NORM_LOW_CHAR="aaaaaaaaaabbccccccdddddeeeeeeeeeefffgggggggghhhiiiiiiiiiijjkkkklllllmmnnnnnoooooooooppqrrrrssssssstttttuuuuuuuuuuvwwwwwxyyyyyzzzz" 
#SPEC_CAP_CHAR="AÀÁÂÃÄÅĀĂĄBḂCĆÇČĈĊDḐĎḊĐEÈÉĚÊËĒĔĘĖFḞGǴĢǦĜĞĠǤHĤĦIÌÍÎĨÏĪĬĮİJĴKḰĶǨĸLĹĻĽŁMṀNŃŅŇÑOÒÓÔÕÖŌŎØPṖQRŔŖŘSŚŞŠŜṠTŢŤṪŦUÙÚÛŨÜŮŪŬŲVWẀẂŴẄXYỲÝŶŸZŹŽŻ" 
#SPEC_CAP_CHAR="AAAAAAAAAABBCCCCCCDDDDDEEEEEEEEEEFFGGGGGGGGHHHIIIIIIIIIIJJKKKKKLLLLLMMNNNNNOOOOOOOOOPPQRRRRSSSSSSTTTTTUUUUUUUUUUVWWWWWXYYYYYZZZZ" 
#sed -e "y/'$SPEC_CHAR'/'$NORM_CHAR'/" 
if [ "$fn2win" != "$testFn" ]; then 
    newLinFn=$(echo "$fn2win" | fromdos | tr "\n" " " |\ 
    sed -e " 
    s/[?()\[\]=+<>:;©®”,*|]/_/g 
    s/"$'\t'"/ /g 
    s/–/-/g 
    s/’/'/g 
    s/α/alpha/g 
    s/β/beta/g 
    s/µ/micro/g 
    s/Æ/AE/g 
    s/Ǽ/AE/g 
    s/æ/ae/g 
    s/ǽ/ae/g 
    s/DZ/DZ/g 
    s/DŽ/DZ/g 
    s/Dž/Dz/g 
    s/Dz/Dz/g 
    s/dz/dz/g 
    s/dž/dz/g 
    s/ff/ff/g 
    s/fi/fi/g 
    s/fl/fl/g 
    s/ffi/ffi/g 
    s/ffl/ffl/g 
    s/ſt/ft/g 
    s/IJ/IJ/g 
    s/ij/ij/g 
    s/LJ/LJ/g 
    s/Lj/Lj/g 
    s/lj/lj/g 
    s/NJ/NJ/g 
    s/Nj/Nj/g 
    s/nj/nj/g 
    s/Œ/OE/g 
    s/œ/oe/g 
    s/ß/SZ/g 
    s/\"/_/g 
    s/[[:cntrl:]]/_/g 
    s/\ $//g 
    " |\ 
    fold -s -w 251 | head -1 | sed 's/\ $/.pdf/') 
    if [ "$fn2win" != "$newLinFn" ]; then 
     mv "$fn2win" "$newLinFn" 
    fi 
fi 
winFn=$(echo "z:"$newLinFn | sed 's/\//\\/g') 
+0

Je ne pense pas que ce soit hors sujet, je ne sais pas pourquoi il y avait un vote serré pour cette –

+0

Quelqu'un avait probablement l'impression enchaînant un tas d'opérations sed ressemble plus à une question d'utilisation qu'à une question de programmation. C'est une position discutable. –

+0

Merci pour l'explication. Je pense que c'est une fonction utile à être capable de faire. J'ai besoin d'utiliser PDF-XChange Viewer pour ses capacités de mise en évidence à travers le vin et cela serait utile pour cela. Je regarde, et je souligne des centaines d'articles comme je suis sûr que d'autres chercheurs le font, alors quelqu'un doit avoir rencontré ce problème. Où est l'endroit approprié pour poser cette question? –

Répondre

1

Cela ressemble à elle devrait le faire: http://pwet.fr/man/linux/commandes/konwert

+0

Je ne suis pas sûr que cela fonctionne pour ce que j'essaie de faire, il semble convertir les encodages, mais je ne vois pas une conversion évidente pour mon but. –

+0

La conversion en ascii vous prendrait la plupart du temps, limitant le nombre de conversions codées en dur qu'il vous reste à gérer. – OliJG

+0

+1 'konwert utf8-ascii' est utile et au moins se débarrasse des caractères internationaux et convertit les ligatures en caractères séparés. 'konwert utf8-tex' est aussi intéressant car il convertit des symboles grecs tels que α en \ alpha. –