2010-12-10 5 views
3

Windows에서 합법적 인 파일 이름으로 Linux 파일의 이름을 바꾸고 싶습니다. 허용 된 길이보다 길어서는 안되며 창에 허용되지 않는 문자가 없어야합니다. 때로는Windows에서 합법적 인 새 파일 이름으로 Linux 파일 이름의 이름을 자동으로 바꿉니다.

은 또한 복사에서 제목을 붙여 넣을 때 문자의 일종 때때로 생성 라인의 끝에있다가 같은 , ®, 또는 ?으로 나는 파일 이름 논문에서 제목을 복사하고 특수 문자가 pdf. 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$ 

또는

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$ 

내가 스크립트를 시작하지만 우아하고 완전하지 않습니다

. 누군가 이미 이와 비슷한 것을 했습니까? 아니면 그것을 수행하는 빠르고 우아한 방법이 있습니까? 그것을해야처럼

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

I는이 –

+0

누군가에 가까운 투표가 왜 오프 주제, 잘 모르겠어요 생각하지 않습니다 아마도 함께 모인 것을 느꼈다 sed 작업은 프로그래밍보다는 사용법과 비슷합니다. 그것은 논쟁의 여지가있는 입장입니다. –

+0

설명해 주셔서 감사합니다. 나는 이것이 할 수있는 유용한 기능이라고 생각한다. 나는 PDF-XChange Viewer를 사용하여 와인을 통한 기능 강조 표시가 필요하며 이는 유용 할 것입니다. 나는 다른 연구자들이 확신 하듯이 수백 개의 논문을보고 강조하므로 누군가가이 문제에 부딪쳤을 것입니다. 이 질문을 할 수있는 적절한 곳은 어디입니까? –

답변

1
+0

이것이 내가하려는 일에 효과가 있을지 모르겠다. 인코딩을 변환하는 것으로 보이지만 내 목적을 위해 명백한 변환을 보지 못한다. –

+0

ascii로 변환하면 처리 할 수있는 하드 코딩 된 변환의 수를 제한하여 대부분의 방법으로 처리 할 수 ​​있습니다. – OliJG

+0

+1'konwert utf8-ascii'는 도움이되며 적어도 국제적인 문자를 제거하고 합자를 각각의 문자로 변환합니다. 'konwert utf8-tex'는 또한 α와 같은 그리스 기호를 \ alpha로 변환하기 때문에 흥미 롭습니다. –

관련 문제