2011-05-21 12 views
2

に先行しなければならない:検索:パスは、私はこのエラーを取得しています表現

は「見つける:パス式

使用前になければなりません:[-H] [-L] [-P] [パスを見つけることが.. 。] [式]」私は生産このコードの場合

for subdir in `find ./$file/ -name "*[email protected]"` 
do 
new_ext=`echo $subdir | sed "s/\(.*\.\)$/\1$new/"` 
mv $subfile $new_ext 
done 

私は上記のコードで何をしようとしているが、古いを入力せず、現在のサブディレクトリ内のファイルの拡張子の名前を変更でファイル拡張子。

私が間違っていることを指摘する助けがあれば、感謝するでしょう。

+0

が重複する可能性(http://stackoverflow.com/questions/6068733/renaming-a-file-extension-without-specifying)私が考えていた – Johnsyweb

答えて

1

"*[email protected]"あなたがしたいことは間違いありません。コマンドin an arrayをビルドします。ここで

+0

は、私はちょうどそれに名前を付ける必要があります"$ @"として?私はあなたが私をリンクしたものを読んだ。ありがとう。 –

+0

いいえ、複数の '-name'述部が必要です(正しく動作させたい場合は' -o')。 –

2

は私の試みです:

for old_extension in "[email protected]" 
do 
    find ./$file -name "*.$old_extension" | while read old_file 
    do 
     new_file=${old_file%$old_extension}new 
     echo mv "$old_file" "$new_file" 
    done 
done 
  • findコマンドの出力は、whileループ、一度に1行で読み取られ、各行は、変数$ old_file
  • に割り当てられています$ {old_file%$ old_extension}構造体が拡張子を削除すると、新しい拡張子 'new'が$ new_fileに追加されます
  • 視覚的検証のためにecho mv ...行が画面に出力されます
  • 結果に満足すれば、エコーを削除してスクリプトを再実行して、本当に被害を被ることができます。注意:エコーを除去する前に結果を確認してください。
  • 埋め込みスペースの有無にかかわらず、私のソリューションをテストしました。
[指定せずにファイルの拡張子の名前を変更する]の
+1

はい、元のコードはさまざまな理由でひどいです。しかし、あなたはfindコマンドが機能しないという点を完全に忘れてしまった*。 –

+0

@Ignacio:複数の拡張を考慮してコードを編集しました。 findコマンドは今動作するはずです。Teeth氏が* file *変数の値を設定するようにしてください。 –

関連する問題