ファイルサフィックスを変更する方法

ファイルサフィックスを変更する方法

複数のサブフォルダとファイルを含むディレクトリ構造では、一部のファイル名にはサフィックス_create(たとえばjava1_create)があり、一部のファイル名には_bakjava2_bak)があります。

すべてのファイルにサフィックスが付くように_createファイル名をサフィックスに変更するだけです。_bak_bak

これを行うコマンドやスクリプトはありますか?

答え1

Linuxでは、_createファイル名に何もないと仮定すると(最後にのみ)、renameすべての非組み込みLinuxシステムにインストールされているutil-linuxパッケージのユーティリティを使用できます。呼び出しは、findサブディレクトリ内のすべてのファイルに対してコマンドを繰り返し実行します。

find -depth -exec rename _create _bak {} +

Debianおよび派生ディストリビューション(Ubuntu、Mintなど)では、Perlスクリプトはとして提供されるか、代わりにrename呼び出されるか、または置き換えられます。rename.ulrenamerename _create _bakrename 's/_create$/_bak/'

答え2

これがあなたが求めているものかもしれません:

for file in $(find . -name "*_create"); do mv -i $file ${file%%_create}_bak; done

実際のファイルで使用する前に必ずテストしてください。

答え3

Debian、Ubuntu、およびその派生製品ではPerlが使用され、rename時には次のようにインストールされますprename

#enable ** globbing
shopt -s globstar 
#use the rename utility
rename -n 's/_create$/_bak/' **_create 

期待どおりに動作したら-n(=) フラグを削除します。--no-act


メモ:

これはおそらくこれを行う最も短く効率的な方法です。特にすでにshotp -s globstar(mine ~/.bashrc)を使用している場合はさらにそうです。

しかし、次のようになります。

-bash: /usr/bin/rename: Argument list too long

**_create拡張子がgetconf ARG_MAX文字長(Linuxシステムでは2097152)を超える場合。

find -print0この場合、次のように使用する必要がありますxargs -0(参照lcd047の答え)。

関連情報