Shell-Script
如何刪除shell腳本中所有子目錄中的空間?
我嘗試使用以下 shell 腳本刪除所有帶下劃線的空格:
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
用這個:
find -name "* *" -print0 | sort -rz | \ while read -d $'\0' f; do mv -v "$f" "$(dirname "$f")/$(basename "${f// /_}")"; done
find
將搜尋名稱中帶有空格的文件和文件夾。這將列印 (-print0
) 並使用 nullbytes 作為分隔符來處理特殊文件名。反轉文件順序,使文件夾中最深的
sort -rz
文件最先移動,而文件夾本身將是最後一個。因此,在所有文件和文件夾在其中重命名之前,永遠不會重命名文件夾。最後,該
mv
命令重命名文件/文件夾。在目標名稱中,我們只刪除文件 basename 的空格,否則將無法再訪問它。