批量重命名 URL 编码的文件名和文件夹路径
Batch rename URL encoded file name & folder path
我下载了一些文件,不幸的是该工具在文件路径中使用了 URL 编码。我该如何解决?
几条路径:
/tmp/site/test/m%3dplusone
/tmp/site/test/m%3dplusone/rt%3dj
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/35.jpg%3f_%3d15099203492
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/d%3d1
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ/rs=AGLTcCOhuNhUv0siK0B4I8EcahYmZPyCaA/cb%3dgapi.loaded_0
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ/rs=AGLTcCOhuNhUv0siK0B4I8EcahYmZPyCaA/cb%3dgapi.loaded
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ/rs=AGLTcCN8zpbBBFew5eMDpwxBKYKKSK8U4Q/cb%3dgapi.loaded
/tmp/site/label%3fnode%3d0%26group%3d1%26allgroups%3d1%26offset%3d0%26nbins%3d1%26attrs%3dCategory%2b102275%26irversion%3d620
/tmp/site/id%3fd_visid_ver%3d1.9.0%26d_field%20group%3dA%26mcorgid%3d700CFDC5570CBFE67F000101%2540AdobeOrg%26mid%3d49349141751585207132014752155379255530%26callba
/tmp/site/id%3fd_visid_ver%3d1.9.0%26d_fieldgroup%3dA%26mcorgid%3d700CFDC5570CBFE67F000101%2540AdobeOrg%26mid%3d49349141751585207132014752155379255530%26ts%3d1
/tmp/site/b/ss/global/search%3Fq%3Da1%2Cb2%2Bc3%2Cd%26param%3Dvalue
/tmp/static_assets/media/jammer/megamenu/content_spots/custom/2674305-createyourown%7e1.jpg
/tmp/personal/vt/data%3dNwqMUcvO0zp-zhtVWUbRaUuK8hKaosTsTcCU58fnwoZT5MKfrwefqzeUX84jI1IUbrkBAA7G0LvDFgsIDzCc69CTnzc8Aq4S2HX1r6Mx5VgYQuGShWuY2O0516KXD9a431pw9S06KZJs
这些需要保存到它的URL解码路径,比如
%3d
-> =
%3f
-> 不能保存到?,因为没有文件系统支持,所以可以替换成-
- 路径中也有space,比如
%2b
。
- 等等。
到目前为止我可以解决以下问题:
删除文件扩展名后的查询字符串:
find . -name '*%3f*' -exec bash -c 'mv [=17=] ${0/\%3f*}' {} \;
用以下命令替换“@”字符。
$ find . -name '*%40*' -exec bash -c 'echo [=18=] ${0/\%40/@}' {} \;
我尝试了类似的方法来重命名/移动目录,但它不起作用,因为只有第一次出现被替换。
$ find . -type d -name '*%3d*' -exec bash -c 'echo [=19=] ${0/\%3d/=/g}' {} \;
(/g
或全局开关不起作用)
环境是Windows中的macOS / Cygwin。众所周知,macOS 默认不支持 rename
命令。一行会有帮助。
请提前帮忙,谢谢。
尝试使用 renameutils
包中的 deurlname
实用程序...它可用于 cygwin and homebrew...
然后:find /tmp/site | tac | while read line;do deurlname "${line}";done
此外,您的 find
仅重命名第一次出现的位置,因为重命名父文件夹后,其所有内容都将失败并显示 file not found
。所以,如果你没有也不愿意安装homebrew/renameutils,试试find /tmp/site | tac | while read line;do mv "${line}" "${line//%3d/=}";done
此外,执行 -exec bash -c '[=16=] ${0/...'
时您是单引号整个命令,因此如果您尝试将 %20
重命名为 space,它将失败。如果您想使用它,请将文件名双引号为 -exec bash -c 'mv "[=18=]" "${0/...}" {} \;
。此外,bash 的变量替换 ${0/}
(使用单斜杠)仅替换第一次出现的位置,因此使用 ${0//}
替换每次出现的位置。
或者如果您想使用 find
+sed
一次重命名所有 url 标签:find /tmp/site | tac | while read line;do mv "${line}" "$(sed -e 's|%3d|=|g' -e 's|%26|\&|g' -e 's|%3f|-|g' <<<$line)";done
我正在使用 tac
来反转 find
输出并避免在子文件夹之前重命名父文件夹的问题。
我下载了一些文件,不幸的是该工具在文件路径中使用了 URL 编码。我该如何解决?
几条路径:
/tmp/site/test/m%3dplusone
/tmp/site/test/m%3dplusone/rt%3dj
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/35.jpg%3f_%3d15099203492
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/d%3d1
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ
/tmp/site/test/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ/rs=AGLTcCOhuNhUv0siK0B4I8EcahYmZPyCaA/cb%3dgapi.loaded_0
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.e1PemSdvnM4.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ/rs=AGLTcCOhuNhUv0siK0B4I8EcahYmZPyCaA/cb%3dgapi.loaded
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ
/tmp/site/_/scs/apps-mozaic/_/js/k%3doz.gapi.en_US.gzO-5OVAi4o.O/m%3dplusone/rt%3dj/sv%3d1/d%3d1/ed%3d1/am%3dwQ/rs=AGLTcCN8zpbBBFew5eMDpwxBKYKKSK8U4Q/cb%3dgapi.loaded
/tmp/site/label%3fnode%3d0%26group%3d1%26allgroups%3d1%26offset%3d0%26nbins%3d1%26attrs%3dCategory%2b102275%26irversion%3d620
/tmp/site/id%3fd_visid_ver%3d1.9.0%26d_field%20group%3dA%26mcorgid%3d700CFDC5570CBFE67F000101%2540AdobeOrg%26mid%3d49349141751585207132014752155379255530%26callba
/tmp/site/id%3fd_visid_ver%3d1.9.0%26d_fieldgroup%3dA%26mcorgid%3d700CFDC5570CBFE67F000101%2540AdobeOrg%26mid%3d49349141751585207132014752155379255530%26ts%3d1
/tmp/site/b/ss/global/search%3Fq%3Da1%2Cb2%2Bc3%2Cd%26param%3Dvalue
/tmp/static_assets/media/jammer/megamenu/content_spots/custom/2674305-createyourown%7e1.jpg
/tmp/personal/vt/data%3dNwqMUcvO0zp-zhtVWUbRaUuK8hKaosTsTcCU58fnwoZT5MKfrwefqzeUX84jI1IUbrkBAA7G0LvDFgsIDzCc69CTnzc8Aq4S2HX1r6Mx5VgYQuGShWuY2O0516KXD9a431pw9S06KZJs
这些需要保存到它的URL解码路径,比如
%3d
->=
%3f
-> 不能保存到?,因为没有文件系统支持,所以可以替换成-
- 路径中也有space,比如
%2b
。 - 等等。
到目前为止我可以解决以下问题:
删除文件扩展名后的查询字符串:
find . -name '*%3f*' -exec bash -c 'mv [=17=] ${0/\%3f*}' {} \;
用以下命令替换“@”字符。
$ find . -name '*%40*' -exec bash -c 'echo [=18=] ${0/\%40/@}' {} \;
我尝试了类似的方法来重命名/移动目录,但它不起作用,因为只有第一次出现被替换。
$ find . -type d -name '*%3d*' -exec bash -c 'echo [=19=] ${0/\%3d/=/g}' {} \;
(/g
或全局开关不起作用)
环境是Windows中的macOS / Cygwin。众所周知,macOS 默认不支持 rename
命令。一行会有帮助。
请提前帮忙,谢谢。
尝试使用 renameutils
包中的 deurlname
实用程序...它可用于 cygwin and homebrew...
然后:find /tmp/site | tac | while read line;do deurlname "${line}";done
此外,您的 find
仅重命名第一次出现的位置,因为重命名父文件夹后,其所有内容都将失败并显示 file not found
。所以,如果你没有也不愿意安装homebrew/renameutils,试试find /tmp/site | tac | while read line;do mv "${line}" "${line//%3d/=}";done
此外,执行 -exec bash -c '[=16=] ${0/...'
时您是单引号整个命令,因此如果您尝试将 %20
重命名为 space,它将失败。如果您想使用它,请将文件名双引号为 -exec bash -c 'mv "[=18=]" "${0/...}" {} \;
。此外,bash 的变量替换 ${0/}
(使用单斜杠)仅替换第一次出现的位置,因此使用 ${0//}
替换每次出现的位置。
或者如果您想使用 find
+sed
一次重命名所有 url 标签:find /tmp/site | tac | while read line;do mv "${line}" "$(sed -e 's|%3d|=|g' -e 's|%26|\&|g' -e 's|%3f|-|g' <<<$line)";done
我正在使用 tac
来反转 find
输出并避免在子文件夹之前重命名父文件夹的问题。