0

私は徹底的に調査して、達成しようとしていることに対して機能するスクリプトを見つけて作成しました。

Bashで複数のファイル名を変更しようとしています。このタイプでは、ハイフンを削除しようとしています。

YachtRescueVO-041512.mpg

YachtRescueVO041512.mpg

しかし、その後、同じディレクトリにさらに多くのファイルがあります。ハイフンと日付の両方を削除しようとしています。

6CO1-041512.mpg

6C01.mpg

6B1A、3TSE1、CO1、11TSE3、TS1などの他のファイル命名規則があるため、正規表現が必要になると確信しています。これは長いスクリプトになると思います。時間があれば、よろしくお願いします。

4

3 に答える 3

1

Bash パラメーター展開を参照してください

ファイル名が次の場所にあるとしますvar:

new_var = ${var%-*}${var#*-}

これは、最初の例では問題ありません。2 番目の例:

new_var = ${var%-*}.${var#*.}

あなたの質問から、あなたが何をしたいのかを認識できません。

于 2012-04-16T00:13:13.943 に答える
1

あなたがここで尋ねた質問にすでにこれを投稿しましたが、これが別の問題であると思われる場合は、ディレクトリとそのサブディレクトリ内のすべてのファイルの名前を変更します。

for file in $(find dirWithDashedFiles -type f -iname '*-*'); do
  mv $file ${file//-/}
done

他の投稿で述べたすべての警告が適用されます。

ニーズに合わせて文字列操作を変更できます。たとえば、すべてのハイフンを削除した後、これを実行し6C01て、名前に含まれるファイルの日付を削除できます。

for file in $(find dirWith6C01Files -type f -iname '6C01*'); do
  mv $file ${file%[0-9][0-9][0-9][0-9][0-9][0-9].mpg}.mpg
done

このサイトには、必要な正規表現を開始するための bash での文字列操作に関する情報がいくつかあります。

注:一致する文字の正確な数を指定するものを覚えていない/見つけることができませんでした[0-9]{6}。誰かがそれを見つけたら、私に知らせてください。

于 2012-04-16T00:52:40.897 に答える
1

ええと、そのようなスクリプトを実行する時間はありませんが、次のコマンドを確認する必要があると思います。

  • シード
  • 名前を変更
  • 切る
  • おかしい

はい、正規表現は非常に効率的な方法ですが、構文で本当に効率的になるにはかなりの時間がかかります...

于 2012-04-16T00:07:35.180 に答える