萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Bash 大括號擴展實戰技巧:一鍵備份、重命名、批次建立檔案與目錄

Bash 大括號擴展 讓命令列操作更簡潔高效,透過 {item1,item2,...} 語法在執行前展開為多個參數。

核心語法

cp /etc/apt/sources.list{,.bak}
# 展開為:cp /etc/apt/sources.list /etc/apt/sources.list.bak

原理:{,.bak} 中逗號前為空 → 保持原字串;逗號後為 .bak → 附加 .bak。Shell 自動展開為兩個完整參數。

實用場景大全

1. 快速備份/重命名

cp /etc/nginx/nginx.conf{,.bak}
mv /var/log/app.log{,.old}
cp -r /home/user/project{,_backup_$(date +%F)}

2. 批次建立多層目錄結構

mkdir -p /var/www/{html,logs,backup}/{dev,staging,prod}
# 一次建立 9 個目錄

3. 批次建立檔案

touch file_{1..10}.txt
touch {readme,changelog,license,contributing}.md
touch src/{main,test}/{java,resources}/.gitkeep

4. 序列與字元範圍

echo {1..10}          # 1 2 3 ... 10
echo {01..10}         # 01 02 ... 10 (零填充)
echo {a..z}           # a b c ... z
echo {A..Z}           # 大寫字母
echo {1..10..2}       # 1 3 5 7 9 (步長 2,Bash 4.0+)

5. 巢狀擴展

echo {A,B}{1,2}       # A1 A2 B1 B2
mkdir -p project/{src,test}/{main,resources}/{java,scala}

6. 結合命令替換

cp config.ini config.ini.$(date +%F)
# 更簡潔:
cp config.ini{,.{$(date +%F),bak}}

注意事項

  • **展開順序**:大括號擴展 → 參數分割 → 命令替換 → 萬用字元展開 → 路徑展開
  • **不進行路徑展開**:cp /etc/{passwd,group} 正常,但 cp /etc/*.conf{,.bak} 不會先展開萬用字元,需改用迴圈
  • **空格敏感**:{a, b} 會產生 a 和 b(含前導空格),請勿在逗號後加空格
  • **僅限 Bash/Zsh**:標準 POSIX sh 不支援,腳本開頭需 #!/bin/bash

進階組合:重命名批次處理

# 將 .jpg 批次改為 .jpeg
for f in *.jpg; do mv "$f" "${f%.jpg}.jpeg"; done

# 搭配大括號一次處理多前綴
for p in img_ photo_ pic_; do mv ${p}*.jpg ${p}*.jpeg; done

掌握大括號擴展,命令列操作效率提升 50% 以上,是 Linux 進階用戶必備技能。

copyright © 萬盛學電腦網 all rights reserved