すべての名前を検索して変更する

すべての名前を検索して変更する

背景

私はlinux / unixを初めて使用しています(私はMacを使用していますが、どのようなものを使用しているのかわかりません)、誰かが間違った名前のフォルダとファイルをたくさん作成したので、それを入れて使用する必要があります。正確な名前。例えば、彼女はそれをオレンジの代わりにリンゴと命名しました。

私は何をすべきか

興味のあるディレクトリに移動し、そのディレクトリに次のものが必要です。

  1. サブフォルダ、ファイル、またはディレクトリ名の「apple」を「orange」に置き換えます。

  2. すべてのファイル(テキストと非テキスト)で、「apple」という単語を「orange」に置き換えます。

私が試したこと

私は次のコマンドを試しました。

grep -lr "リンゴ"。 | xargs sed -i "s/apple/orange/g"

それはまったく動作しません

私も次のことを試しました。

./-exec sed-i's/apple/orange/g'{}検索\;

これは多くのインスタンスを置き換えますが、すべてではありません。ファイル/フォルダ/ディレクトリ名の単語を変更しません。

助けてください!

ベストアンサー1

これはおそらく可能なよりもBASHyですが、おそらく正しい方向に行くでしょう。

つまり、appleを含むすべてのフォルダを見つけ、次のように逆順に並べ替えます。

/tmp/りんご/テスト/りんご

最初の「リンゴ」が誤動作しても問題は発生しません。次に、出力はwhileループに供給されます。ここで読み取り関数は、一致するすべてのフォルダを保持する変数をロードします。最後に、フォルダを正しい名前構造に移動します。

ディレクトリの場合は、以下を試してください。

./ -regex '^.*apple' -type d | sort -r |無効な名前を読み取ったときに実行mv $badname/%apple/orange};

ファイル名の場合(ディレクトリのクリーンアップ後)

./ - 正規表現「^.」を探します。りんご。' - タイプf | sort -r |無効な名前を読み取るときにmv $badname ${badname/apple/orange}を実行する

ファイルの内容の他の多くの例があります。

Awk/Sed: 文字列を再帰的に検索して置き換える方法は?

おすすめ記事