2012-03-24 20 views
0

最初に、私はこれが後ろ向きに聞こえることを知っています。そうです。しかし、(BASHコマンドラインで)スクリプト生成サムネイルファイル名をに変換すると、のファイル名に "%20"が含まれています。あなたが好奇心をそそられている理由は、私が使用しているスクリプトが現在のURLからサムネイルファイル名を作成し、プロセスに%20を追加したためです。しかし、現在WordPressは "This%20Filename.jpg"のようなファイルを探していますが、ブラウザはもちろん、エスケープ文字を削除してスペースで置き換えています。だからこそ、ファイル名にスペースを入れてはいけません。"%20"のファイル名から空白を含む*ファイル名を作成するBASHスクリプト

私はここにこだわっているので、私は自分の既存のサムネイルを変換したいと思っています。次に、上記のスクリプトで問題を解決するための質問を投稿します。私が今探しているのは、悪いことをし、 "%20"のファイル名から空白を含むファイル名を作成する簡単なスクリプトです。

ありがとうございます!

答えて

2

convmvこれは可能ですが、スクリプトは必要ありません。

$ ls 
a%20b.txt 
$ convmv --unescape *.txt --notest 
mv "./a%20b.txt" "./a b.txt" 
Ready! 
$ ls 
a b.txt 
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 
3

あなたはだけ 1つのスペースで各リテラル%20を交換したい場合:

for i in *; do 
    mv "$i" "${i//\%20/ }" 
done 

(例えばこれはfile%with two spacesからfile%with%20two%20spacesの名前を変更します) 。 おそらく%25 - >%も同様の変換を適用する必要があります。

2

個人的には、ファイル名に空白がつきません。将来のスクリプトでは特別に扱わなければならないことに注意してください。とにかく、あなたが達成したいことをするスクリプトがあります。

#!/bin/sh 
for fname in `ls *%20*` 
do 
    newfname=`echo $fname | sed 's/%20/ /g'` 
    mv $fname "$newfname" 
done; 

これをファイルに置き、実行権限を追加し、名前に%20のファイルがあるディレクトリから実行します。

+0

これはうまくいきました。ありがとう、私はあなたの感情に同意することを知ってください。私はスペースのあるファイル名を持つのが好きではありません。実際、おそらくあなたは恒久的な解決策に私の試みを助けることができます:http://stackoverflow.com/questions/9849614/php-regex-script-to-create-filenames-with-dashes-instead-of-spaces – user1289585

0

bashではなく、名前の%hh(エンコードされた16進数)のより一般的なケースです。

#!/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); 
} 
関連する問題