文章目錄
- 0.運行編譯腳本遇到問題:
- 方法 1:使用 `dos2unix`(推薦)
- 1. 安裝 `dos2unix`
- 2. 遞歸轉換整個目錄
- 方法 2:使用 `sed`(無需安裝額外工具)
- 方法 3:使用 `tr`(僅單文件,不推薦遞歸)
- 方法 4:Git 自動轉換(適用于版本控制項目)
- 注意事項
- 總結
0.運行編譯腳本遇到問題:
./build.sh: line 17: $‘\r’: command not found
要將整個文件夾內所有文件的換行符從 Windows(CRLF) 轉換為 Unix(LF),可以使用以下方法:
方法 1:使用 dos2unix
(推薦)
1. 安裝 dos2unix
# Ubuntu/Debian
sudo apt-get install dos2unix# CentOS/RHEL
sudo yum install dos2unix# macOS(通過 Homebrew)
brew install dos2unix
2. 遞歸轉換整個目錄
# 轉換當前目錄及子目錄下所有文件
find . -type f -exec dos2unix {} \;
選項解釋:
find . -type f
:查找當前目錄及其子目錄下的所有文件(-type f
)。-exec dos2unix {} \;
:對每個文件執行dos2unix
命令。
?? 注意:
- 如果只想轉換特定擴展名(如
.sh
、.txt
),可以加上-name
過濾:find . -type f -name "*.sh" -exec dos2unix {} \;
- 謹慎使用! 二進制文件(如
.png
、.exe
)會被損壞,建議先備份或排除非文本文件。
方法 2:使用 sed
(無需安裝額外工具)
# 遞歸轉換所有文件(包括子目錄)
find . -type f -exec sed -i 's/\r$//' {} \;
選項解釋:
sed -i 's/\r$//'
:直接修改文件(-i
),刪除行尾的\r
(Windows 回車符)。
適用場景:
- 適用于大多數文本文件(如
.sh
、.py
、.c
、.txt
)。 - 避免對二進制文件使用(可能損壞文件)。
方法 3:使用 tr
(僅單文件,不推薦遞歸)
# 單文件轉換
tr -d '\r' < input_file > output_file# 遞歸轉換(結合 find)
find . -type f -exec sh -c 'tr -d "\r" < "{}" > "{}.tmp" && mv "{}.tmp" "{}"' \;
缺點:
- 效率較低,且需要臨時文件([mv](file://e:\Project_Code\08_remove\mcu\driver\chip\ab159x\inc\hal_pmu_nvkey_struct.h#L361-L361) 操作)。
方法 4:Git 自動轉換(適用于版本控制項目)
如果文件在 Git 倉庫中,可以配置 Git 自動處理換行符:
# 全局設置(提交時轉換為 LF,檢出時不轉換)
git config --global core.autocrlf input# 對已有文件重新規范化換行符
git rm --cached -r .
git reset --hard
注意事項
-
備份重要文件:
轉換前建議備份整個目錄,以防意外損壞二進制文件。cp -r your_folder your_folder_backup
-
排除二進制文件:
使用 [find] 時可通過-name
排除非文本文件:find . -type f ! -name "*.png" ! -name "*.exe" -exec dos2unix {} \;
-
驗證轉換結果:
檢查文件是否仍包含\r
:# 列出所有含 CRLF 的文件 grep -rl $'\r' .
總結
方法 | 命令 | 適用場景 |
---|---|---|
dos2unix | find . -type f -exec dos2unix {} \; | 推薦,安全高效 |
sed | find . -type f -exec sed -i 's/\r$//' {} \; | 無需安裝額外工具 |
tr | find . -type f -exec sh -c 'tr -d "\r" < "{}" > "{}.tmp" && mv "{}.tmp" "{}"' \; | 低效,臨時文件 |
Git | git config --global core.autocrlf input | 僅適用于 Git 倉庫 |
選擇最適合你的方法即可!