我想将 linux 文件重命名为在 windows 中合法的文件名。它的长度不应超过允许的长度,并且不应包含 Windows 中不允许的字符。有时我将论文的标题复制到文件名,它们有特殊字符,例如–
, ®
, or ?
另外,从 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$
or
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' )
这看起来应该这样做:http://pwet.fr/man/linux/commandes/konwert http://pwet.fr/man/linux/commandes/konwert
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)