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