ファイル名やディレクトリ名にあるスペースの置換

空白,半角スペースが入っているときに一括でリネームする方法について,意外と面倒臭かったのでメモ.
find や grep でリストアップして for や while read を使えば良いと思ったものの,for の中でスペースが区切りと認識され文字列が分断されてしまう.
ダブルクォート""をうまく使えば簡単…という訳でもなかった.

直下のディレクトリ名の置換

直下のディレクトリ名を全部変える場合.
ここでは半角スペースをアンダースコア _ に変える.

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

上記は直下全てのディレクトリ名に半角スペースが含まれている前提.

直下の全てのディレクトリが対象ではない場合,下記のファイルの置換のスクリプトを参考に,次のようにする.

find . -maxdepth 1 -type d | grep " " | sed -e 's/.*/"&"/; p; s/ /_/g' | xargs -n2 mv

(再帰的な)ファイル名の置換

半角スペースを含んだ直下のファイル全てを,_ に置換してリネームする場合.
ここで,ディレクトリ名は事前に半角スペースが無いようにしておく必要があることに注意.

find . -name "*.*" | grep " " | sed -e 's/.*/"&"/; p; s/ /_/g' | xargs -n2 mv

直下の全部のファイルを検索しなくていい場合は find の -maxdepth オプションを使ったり grep を追加したりして対象を減らす.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2020-10-29 (Thu) 09:33:35 (1435d)