60

このコマンドを使用して、特定のパターンのファイルを検索し、それらの名前を別の名前に変更します

find . -name '*-GHBAG-*' -exec bash -c 'echo mv $0 ${0/GHBAG/stream-agg}' {} \;

このコマンドを実行すると、次のような出力が表示されます

mv ./report-GHBAG-1B ./report-stream-agg-1B
mv ./reoprt-GHBAG-0.5B ./report-stream-agg-0.5B

ただし、最後に実行するlsと、古いファイル名が表示されます。

4

4 に答える 4

90

実際に実行するのではなく、「mv」コマンドをエコーし​​ます。への変更:

find . -name '*-GHBAG-*' -exec bash -c 'mv $0 ${0/GHBAG/stream-agg}' {} \;
于 2013-03-08T09:02:25.120 に答える
37

renameこのタスクを実行するには、コマンドを使用することをお勧めします。renamePerl正規表現として指定されたルールに従って、提供されたファイル名の名前を変更します。

この場合、次を使用できます。

rename 's/GHBAG/stream-agg/' *-GHBAG-*
于 2013-03-08T09:06:12.280 に答える
20

anumiのコメントへの返信として、「**」を照合することで、事実上、ディレクトリを再帰的に検索できます。

rename 's/GHBAG/stream-agg/' **/*-GHBAG-*
于 2013-08-20T03:46:36.710 に答える
2

これは私のニーズに合わせて機能し、一致するすべてのファイルまたはファイルタイプを置き換えます。注意してください、これは非常に貪欲な検索です

# bashrc
function file_replace() {
  for file in $(find . -type f -name "$1*"); do
    mv $file $(echo "$file" | sed "s/$1/$2/");
  done
}

私は通常、find . -type f -name "MYSTRING*"交換する前に試合をチェックするために事前に実行します。

例えば:

file_replace "Slider.js" "RangeSlider.ts"

renamed:    packages/react-ui-core/src/Form/Slider.js -> packages/react-ui-core/src/Form/RangeSlider.ts
renamed:    stories/examples/Slider.js -> stories/examples/RangeSlider.ts

またはファイルタイプを捨ててさらに貪欲にする

file_replace Slider RangeSlider

renamed:    packages/react-ui-core/src/Form/Slider.js -> packages/react-ui-core/src/Form/RangeSlider.js
renamed:    stories/examples/Slider.js -> stories/examples/RangeSlider.js
renamed:    stories/theme/Slider.css -> stories/theme/RangeSlider.css
于 2017-07-06T01:37:14.167 に答える