GNU/Linux >> Linux の 問題 >  >> Linux

ubuntu /bash の下でファイルとディレクトリの名前を再帰的に変更します

find を使用したソリューション :

ファイルのみの名前を変更するには :

find /your/target/path/ -type f -exec rename 's/special/regular/' '{}' \;

ディレクトリのみの名前を変更するには :

find /your/target/path/ -type d -execdir rename 's/special/regular/' '{}' \+

ファイルとディレクトリの両方の名前を変更するには :

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

別のツールをインストールしてもかまわない場合は、rnm を使用できます:

rnm -rs '/special/regular/g' -dp -1 *

すべてのディレクトリ/サブディレクトリを通過します (-dp -1 のため) ) と special を置き換えます 通常


@speakr の回答がヒントになりました。

-execdir を使用してファイルとディレクトリの両方を変換する場合は、 -type f も削除する必要があります 示されている例から。スペルアウトするには、次を使用します:

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

また、 g を追加することを検討してください all を置換する場合は、正規表現への (グローバル) フラグ special の出現 regular で 最初の出現だけでなく、特定のファイル名で。例:

find /your/target/path/ -execdir rename 's/special/regular/g' '{}' \+

special-special.jpg を変換します regular-regular.jpg まで .グローバル フラグがないと、regular-special.jpg になります。 .

参考までに:GNU Rename はデフォルトでは Mac OSX にインストールされていません。 Homebrew パッケージ マネージャーを使用している場合は、brew install rename これを修正します。


これをやってみてください (require bash --version>=4):

shopt -s globstar
rename -n 's/special/regular/' **

-n を削除します テストが OK になったら切り替える

これを実行できる場合とできない場合がある同じ名前のツールが他にもあるので、注意してください。

次のコマンドを実行すると (GNU )

$ file "$(readlink -f "$(type -p rename)")"

のような結果が得られます
.../rename: Perl script, ASCII text executable

以下を含まない:

ELF

これは適切なツールのようです =)

そうでない場合は、Debian でデフォルトにします (通常は既にそうなっています)。 および Ubuntu のような派生物 :

$ sudo update-alternatives --set rename /path/to/rename

(/path/to/rename を置き換えます perl's rename のパスに コマンド。

このコマンドがない場合は、パッケージ マネージャーを検索してインストールするか、手動で行ってください

最後になりましたが、このツールはもともと、Perl の父である Larry Wall によって作成されました。


Linux
  1. Linuxでディレクトリを再帰的に検索および削除する方法

  2. Unix で空のディレクトリとファイルを見つけて削除する方法

  3. すべてのファイルとディレクトリを再帰的に一覧表示する方法

  1. プロのようにLinuxでファイルとディレクトリを探す

  2. Linux で複数のファイルを見つけて名前を変更する

  3. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  1. Linuxで最大のファイルとディレクトリを探す

  2. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  3. Bash =〜正規表現とHttps://regex101.com/?