首先,我知道这听起来很吵。它是。但是我希望转换(在BASH命令行上)一堆脚本生成的缩略图文件名做其中包含“%20”,而不是文件名。如果你很好奇,原因是因为我正在使用的脚本从他们当前的URL创建了缩略图文件名,并且它在过程中添加了%20。但是现在WordPress正在寻找像“This%20Filename.jpg”这样的文件,浏览器当然是删除转义字符并用空格替换它。这就是为什么文件名中不应该有空格的原因。
但是因为我被困在这里,所以我很乐意将现有的缩略图转换过来。接下来,我将发布一个问题以帮助解决上述脚本中的问题。我现在正在寻找的是一个快速的脚本来做坏事并使用带有“%20”的文件名创建带有空格的文件名。
谢谢!
答案 0 :(得分:3)
如果仅想要用一个空格替换每个文字%20
:
for i in *; do
mv "$i" "${i//\%20/ }"
done
(例如,这会将file%with%20two%20spaces
重命名为file%with two spaces
)。
您可能还需要应用%25
- > %
以及其他类似的转换。
答案 1 :(得分:2)
convmv
可以执行此操作,无需脚本。
$ ls
a%20b.txt
$ convmv --unescape *.txt --notest
mv "./a%20b.txt" "./a b.txt"
Ready!
$ ls
a b.txt
答案 2 :(得分:2)
#!/bin/sh
for fname in `ls *%20*`
do
newfname=`echo $fname | sed 's/%20/ /g'`
mv $fname "$newfname"
done;
将其放入文件,添加执行权限并从名称中包含%20文件的目录中运行此权限。
答案 3 :(得分:0)
代码:
#!/bin/bash
# This is where your files currently are
DPATH="/home/you/foo/*.txt"
# This is where your new files will be created
BPATH="/home/you/new_foo"
TFILE="/tmp/out.tmp.$$"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/%20/ /g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done
/bin/rm $TFILE
答案 4 :(得分:0)
不是bash,而是名称中%hh(编码的十六进制)的更一般情况。
#!/usr/bin/perl
foreach $c(@ARGV){
$d=$c;
$d=~s/%([a-fA-F0-9][a-fA-F0-9])/my $a=pack('C',hex($1));$a="\\$a"/eg;
print `mv $c $d` if ($c ne $d);
}