1. ホーム
  2. linux

[解決済み】bashスクリプトでファイル名のスペースを置換する方法

2022-03-29 07:34:03

質問

与えられたルートディレクトリから始まるファイルとディレクトリ名のスペースをアンダースコアに再帰的に置き換える安全な解決策をどなたか教えてください。例えば、以下のようなものです。

$ tree
.
|-- a dir
|   `-- file with spaces.txt
`-- b dir
    |-- another file with spaces.txt
    `-- yet another file with spaces.pdf

になります。

$ tree
.
|-- a_dir
|   `-- file_with_spaces.txt
`-- b_dir
    |-- another_file_with_spaces.txt
    `-- yet_another_file_with_spaces.pdf

解決方法は?

使用方法 rename (別名 prename これはPerlスクリプトで、すでにあなたのシステム上にあるかもしれません。2つのステップで行います。

find . -name "* *" -type d | rename 's/ /_/g'    # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'

に基づいています。 ユルゲンの のバージョンで、ファイルやディレクトリの複数の階層を一度に処理することができます。 /usr/bin/rename (Perlスクリプト)です。

find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;