ファイルを「aa -- bb.pdf」から「bb -- aa.pdf」に移動しようとしているとしましょう。
それを行う明白な方法は次のとおりです。
for f in *;
do
mv $f $(echo "$f" | sed -E 's/(.\*) -- (.\*)(\..\*)/\2 -- \1\3/');
done
いくつかの引数の前後に一重引用符を追加する必要があります。さまざまな引数内にスペースがあり、正しく取得されないため、実際にはもう少し次のようになります。
for f in *;
do
$(echo mv "'"$f"'" "'"$(echo "$f" | sed -E 's/(.\*) -- (.\*)(\..\*)/\2 -- \1\3/')"'");
done
しかし、私がこれを行う方法は、 mv: usage:mv [-f | -i | -n] [-v] source target
などの標準的な使用法のリサイタルだけです。
これを画面に出力すると、見栄えがよくなります。
mv 'aa -- bb.pdf' 'bb -- aa.pdf'
しかし、これでどのようなバリエーションを試しても、使用法を列挙しているだけで (おそらく、構文に問題があることを伝えている)、その理由がわかりません。
何か案は?