0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Linuxのコマンドで、ディレクトリ名とディレクトリ内のファイル名を、まとめて置換する

Posted at

解決したい課題

Hogeというディレクトリの中にHogeという名前のあるテキストが複数存在するケース。
ここで、ディレクトリ名もファイル名もhogeに置換したい。

置換コマンドの説明

find `pwd` -name "*Hoge*" -print | perl -nle 'rename $_, s|Hoge|hoge|r'

printまで

この時点で、対象のディレクトリとファイルの一覧が出る。
-print0としないのは、perlで一行ずつ処理させたいから。

% find `pwd` -name "*Hoge*" -print                                                 
/Users/omokawayasuaki/test/Hoge
/Users/omokawayasuaki/test/Hoge/Hoge1.txt
/Users/omokawayasuaki/test/Hoge/Hoge3.txt
/Users/omokawayasuaki/test/Hoge/Hoge2.txt

perlの部分

s|Hoge|hoge|r'rは、デフォルト変数$_を置換し、スカラー値として返却するためのオプション。置換した元の文字列は変更しないのが特徴。

参考

変換前の状態

% tree                                                                             
.
└── Hoge
    ├── Hoge1.txt
    ├── Hoge2.txt
    └── Hoge3.txt

変換コマンド2回叩く

% find `pwd` -name "*Hoge*" -print | perl -nle 'rename $_, s|Hoge|hoge|r'
% find `pwd` -name "*Hoge*" -print | perl -nle 'rename $_, s|Hoge|hoge|r'

変換後の状態

% tree                                                                             
.
└── hoge
    ├── hoge1.txt
    ├── hoge2.txt
    └── hoge3.txt

以上

さらなる課題

古いディレクトリ名を一回で上書きできないため、コマンドを2回叩くという結果になってしまった。正直、面倒臭い。
もっとスマートな解決策があれば、教えてください :bow:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?