下線付きの空白をすべて削除するには、次のシェルスクリプトを試しました。
find $1 -depth -name "* *" -print0 | \
while read -d $'\0' f; do mv -v "$f" "${f// /_}"; done
ディレクトリが存在すると、ディレクトリが/home/user/g h/y h/u j/
修正され、エラーが発生します。y h
y_h
/home/user/g h/y h/u j
No such file or directory
ベストアンサー1
これを使用してください:
find -name "* *" -print0 | sort -rz | \
while read -d $'\0' f; do mv -v "$f" "$(dirname "$f")/$(basename "${f// /_}")"; done
find
名前にスペースを含むファイルとフォルダが検索されます。-print0
特殊ファイル名を処理するには、ヌルバイトを区切り文字として使用してprint()します。
sort -rz
フォルダの最も深いファイルが最初に移動され、フォルダ自体が最後に移動されるようにファイルの順序を逆にします。したがって、フォルダ内のすべてのファイルとフォルダ名が変更されるまで、フォルダ名は変更されません。
最後に、このmv
コマンドはファイル/フォルダの名前を変更します。ターゲット名では、ファイルのデフォルト名からスペースのみを削除します。そうしないと、アクセスできなくなります。