0

以下に示すように、フォルダ構造があります。

代替テキスト

4つのことを行うbashスクリプトを作成する必要があります。

  1. ジェネリックディレクトリ内のすべてのファイルを検索し、文字列「generic」を見つけて「something」にします。
  2. 上記と同じですが、「GENERIC」を「SOMETHING」に変更します
  3. 上記と同じですが、「Generic」を「Something」に変更します
  4. 「generic」が含まれるファイル名の名前を「something」に変更します

現在、Net Beansで検索と置換を使用して、このプロセスを手動で実行しています。bashスクリプトについてはよくわかりませんが、これは可能だと確信しています。私は自分が実行する何かを考えています、そしてそれは入力として「何か」を取ります。

どこから始めますか?どの関数を使用する必要がありますか?全体的なガイダンスは素晴らしいでしょう。ありがとう。

Ubuntu10.5デスクトップ版を使用しています。

4

2 に答える 2

3

編集

置換部分はsedスクリプトです-それを呼び出しますmapname

sed -i.bak \
    -e 's/generic/something/g' \
    -e 's/GENERIC/SOMETHING/g' \
    -e 's/Generic/Something/g "$@"

これにより、コメントや文字列の単語も変更され、単語全体ではなく、単語の一部として「generic」が変更されることに注意してください。単語だけが必要な場合は、用語の前後に単語の終わりのマーカーを使用します's/\<generic\>/something/g'。は-i.bakバックアップを作成します。

あなたはそれを次のように適用します:

find . -type f -exec mapname {} +

これにより、ファイルのリストを含むコマンドが作成され、実行されます。明らかに、必要に応じて、中間mapnameシェル/ sedスクリプトを回避できます(コマンドsedの単語の代わりにスクリプトをmapname記述することにより)。find個人的には、個別にデバッグすることを好みます。

名前の変更

ファイルの名前の変更は、コマンドを使用して行うのが最適です。renameコマンドには2つのバリエーションがあるため、マニュアルを読む必要があります。次の2つのうちの1つを使用してください。

find . -name '*generic*' -depth -exec rename   generic something   {} +

find . -name '*generic*' -depth -exec rename s/generic/something/g {} +

(Perl正規表現の全容量を備えたより強力なPerlベースのバリアントを使用していることを指摘してくれたStephen Pと、Perlのものが現実の世界でも見られることを指摘してくれたZackJefromiに感謝します*。)rename

ノート:

  • これにより、ディレクトリの名前が変更されます。
  • -depthディレクトリの内容がディレクトリの前に名前が変更されるように、そこに保持することはおそらく価値があります。そうしないと、ディレクトリの名前を変更した後、その中のファイルを見つけることができないため、メッセージが表示される可能性があります(操作findする古い名前が付けられたため)。
  • より基本的なものだけrenameに移動./generic/do_generic.java./something/do_generic.javaます。すべてのファイル名のすべてのコンポーネントを変更するには、コマンドを複数回実行する必要があります。

*私が使用しているバージョンはrename、Camelブックの第1版のコードを基にしています。

于 2011-01-14T00:05:59.880 に答える
1

手順1〜3は、次のように実行できます。

find .../path/to/generic -type f -print0 |
    xargs -0 perl -pi~ -e \
        's/\bgeneric\b/something/g; 
         s/\bGENERIC\b/SOMETHING/g;
         s/\bGeneric\b/Something/g;'

ステップ4であなたが何をしたいのか正確にはわからないので、その部分を手伝うことはできません。

于 2011-01-14T00:06:26.950 に答える