名前変更スクリプトのビルド [閉じる]

名前変更スクリプトのビルド [閉じる]

各フォルダ/ディレクトリを確認し、「セクション」という単語が含まれている場合は、フォルダのタイトルの名前を変更するスクリプトを作成してください。フォルダ名は、「セクション」ではなく「章」という単語を使用して変更する必要があります。スクリプトは、すべてのサブディレクトリを解決して名前を変更するまで、各ディレクトリ、サブディレクトリ、およびサブサブディレクトリで実行する必要があります。

たとえば、

supersectiondir-->subsectiondir-->lowersubsectiondir
次のようにする必要があります。
superchapterdir-->subchapterdir-->lowersubchapterdir

私の試み(上記のsupersectiondirディレクトリから):

find /c/Users/cmd2/supersection -type d -exec sed -i 's/section/chapter/g' {} \; 

$ sh renaming.sh

sed: couldn't edit /c/Users/cmd2/supersection: not a regular file
sed: couldn't edit /c/Users/cmd2/supersection/subsection: not a regular file
sed: couldn't edit /c/Users/cmd2/supersection/subsection/lowersubsection: not a regular file 

答え1

このrenameツールは移植性が非常に低いです。 RHEL/CentOS/Fedora ファミリのバージョンは、renameUbuntu または Debian のバージョンと共通点はほとんどありません。

私は書いた答えは2つのバージョンの使用例を提供します。renameすぐに戻ってください。

どのOSを使っているのかは明らかにしなかったので、具体的に言うのは難しいです。これは宿題だから宿題は自分でやるべきだだから、どのオペレーティングシステムを言っても答えることはできません。

しかし、いくつかのヒントがあります。

  • sed実行対象コンテンツの一つテキストファイル;ファイル名は変更されず、ディレクトリ名も変更されません。この目的には使用できないため、作成したコマンドでエラーが発生します。
  • あなたの命令は正しい方向に進んでいますfind
  • -name役に立つ可能性があるので、-iname演算子を見つけることをお勧めしますfind(与えられたパターンと一致しないファイルの名前を変更しようとする必要はありません)。
  • -execrenameお使いのOSに適したバージョン)を使用するのはおそらく最も簡単で最善の解決策です。

答え2

このツールを使用できますrename。このユースケースの例は次のとおりです。

rename section chapter *

あるいは、あなたの場合はfindの出力をパイプすることもできます。

find . -type d -print | xargs rename section chapter

関連情報