bash スクリプトを使用してファイル名のスペースを置き換える方法 質問する

bash スクリプトを使用してファイル名のスペースを置き換える方法 質問する

特定のルート ディレクトリから始まるファイル名とディレクトリ名のスペースをアンダースコアに再帰的に置き換える安全なソリューションを推奨できますか? たとえば、次のようになります。

$ 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

ベストアンサー1

私が使う:

for f in *\ *; do mv "$f" "${f// /_}"; done

再帰的ではありませんが、非常に高速かつシンプルです。誰かがこれを再帰的に更新できると思います。

この${f// /_}部分は、bash のパラメータ拡張メカニズムを利用して、パラメータ内のパターンを指定された文字列に置き換えます。関連する構文は です${parameter/pattern/string}。参照:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.htmlまたはhttp://wiki.bash-hackers.org/syntax/pe

おすすめ記事