2011-08-15 6 views
2

私はシェルでいくつかのクイックファイル名クリーンアップ(問題があれば、zsh)をしようとしていました。ファイルの名前を変更します。ファイル名を操作するperl -pe

foreach f (\#*.ogg) 
    cp $f `echo $f | perl -pe 's/\#\d+ (.+)$/"\1"/'` 
end 

を(私は念のためにcp代わりのmvを使用しています)さて、私はこのようなものを行うためのツールがあります知っているが、個人的な利益のために私はそれをこの方法で行うことができますどのように思ったんだけど。今、エラーが表示されます。

cp: target `When.ogg"' is not a directory 

ここで、When.oggはファイル名の最後の部分です。私は引用符を追加しようとしましたが(上記を参照)、スペースをエスケープしていますが、これは私が得るものです。

s perl pmr =; omrtの出力を別のコマンドラインツールの最終引数として使用できない理由はありますか?

答えて

0

をこれは、あなたがbashで必要なものですそれがzshにも良いことを願っています。

cp "$f" "`echo $f | perl -pe 's/\#\d+ (.+)$/\1/'`" 

ファイル名にスペースが含まれている場合は、cpの2番目の引数も引用符で囲みます。

+0

ああ、そうだった。 $ fを二重引用符で囲む必要はありませんが、バックティック部分全体を二重引用符で囲みます。私は実際にそこにそれらを置くが、(私のオリジナルの\ 1の周りに)それらを入れている理由は分かりませんが、私はちょうど知ってうれしいです。 – hsiu

+1

ファイル名にスペースがある場合は、$ fを二重引用符で囲む必要があります。また、ファイル名に2つの連続した空白がある場合は、エコーの$ fを二重引用符で囲む必要があります。 – jfg956

+0

@jfgagne:連続スペースに言及してくれてありがとう、それについて考えていない。 –

1

あなたが処理されているファイル名にスペースを持っているように見えますので、cpコマンドが2つ以上の引数は、最後の必須を見たとき、あなたのcpコマンドラインのそれぞれが

cp \#nnnn When.Ogg When.ogg 

のようなものと評価されますコピー先のすべてのファイルのターゲットディレクトリ名にしてください。エラーメッセージです。あなたのソースファイル名($f)には空白が含まれているので、2つの引数として処理されています - cpは3つの argsを見ます。

あなたはそのF 最初 $の周りに二重引用符を入れた場合は、別のファイル名として扱われているから名前の2つの「半分」を防ぐ必要があります。

cp "$f" `echo ... 
+0

恐れていないので、最初の引数の前後に二重引用符を追加しましたが、それでも私には同じエラーが表示されます。 – hsiu

+1

@hsiu cpをechoに置き換えてみてください。どうなっているのですか? –

+0

yi_Hこれを下に置いて、二重引用符はバックティックされた部分の周りにある必要があります - perlをファイル名の周りに置いても機能しませんでした。それを理解してはいけませんが、とにかく走れると思います。 – hsiu

0

私はよく-lが入力をchompし

dir /b ... | perl -nle"$o=$_; s/.../.../; $n=$_; rename $o,$n if !-e $n" 

を使用しています。

-eチェックは、誤ってすべてのファイルの名前を1つの名前に変更しないようにすることです。私は数回それをやった。最後のサポートが彼らに改行してファイル名を

foreach f (...) 
    echo "$f" | perl -nle'$o=$_; s/.../.../; $n=$_; rename $o,$n if !-e $n' 
end 

または

find -name '...' -maxdepth 1 \ 
    | perl -nle'$o=$_; s/.../.../; $n=$_; rename $o,$n if !-e $n' 

または

find -name '...' -maxdepth 1 -exec \ 
    perl -e'for (@ARGV) { 
     $o=$_; s/.../.../; $n=$_; 
     rename $o,$n if !-e $n; 
    }' {} + 

だろうbashで

(と私はzshの推測しています)、 。

関連する問題