Shell-Script

如何刪除shell腳本中所有子目錄中的空間?

  • August 14, 2015

我嘗試使用以下 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 的空格,否則將無法再訪問它。

引用自:https://unix.stackexchange.com/questions/223211