Linux 檔名允許空白、特殊字元,但 Shell 以空白分隔參數,操作含空白檔名需正確跳脫。本文系統整理建立、移動、刪除、進入、壓縮、解壓等全場景處理技巧。
| 方式 | 語法 | 範例 | 適用場景 |
|---|---|---|---|
| 反斜線跳脫 | \ | cd my\ dir | 單一空白、腳本內嵌 |
| 單引號 | 'my dir' | rm -r 'my dir' | 含變數/$/反引號等特殊字元 |
| 雙引號 | "my dir" | mkdir "my dir" | 需變數展開 |
| Tab 自動補全 | Tab | cd my | 互動式操作最推薦 |
my dir、my dir 兩個空白)mkdir my\ dir # 一空白
mkdir my\ \ dir # 兩空白
mkdir "my dir"
mkdir 'my dir'
cd my\ dir
cd "my dir"
cd my # 輸入 my 按 Tab 自動補全為 my\ dir/
ls -l "my dir"
ls -l my\ dir
mv "my dir" /tmp/
mv my\ \ dir /tmp/
mv "my dir" "new name" # 重命名
rm -r "my dir"
rm -r my\ dir
rm -r my\ \ dir
tar czf "my dir.tar.gz" "my dir"
tar czf my\ dir.tar.gz my\ dir
tar cjf "my dir.tar.bz2" "my dir"
tar xzf "my dir.tar.gz"
tar xjf "my dir.tar.bz2"
cp -r "my dir" /backup/
cp -r my\ dir /backup/
find . -name "my dir" -type d
find . -name "my*" -type d
locate "my dir"
# Perl rename (Debian/Ubuntu: rename, CentOS: prename)
rename 's/ /_/g' *
# 純 Bash
for f in *\ *; do mv "$f" "${f// /_}"; done
for f in *; do cmd $f; done → 空白會拆成多參數,必須 cmd "$f"find ... -print0 | xargs -0 cmd 使用 null 分隔scp "file name" user@host:"/remote/path/file name" 雙層引號dir="my dir"; cd "$dir" 必須雙引號_、連字號 -、駝峰式"$var"fd、ripgrep、fzf 原生支援空白檔名空白檔名非 Linux 不支援,而是 Shell 解析機制所致。掌握跳脫規則、善用 Tab 補全、落實命名規範,即可輕鬆駕馭。