Filenames

替換文件名中空格之間的單個空格和連字元

  • February 3, 2020

我有一堆這樣命名的文件:

File one - some name - 01-05-2020  
File two - some name - 01-07-2020  
File three - some name - 01-15-2020  

我需要的是更換:

  • 帶有連字元的單個空格。
  • 帶下劃線的空格之間的連字元。

我的預期結果是:

File-one_some-name_01-05-2020  
File-two_some-name_01-07-2020  
File-three_some-name_01-15-2020 

PD:我正在使用基於 Arch 的 Manjaro。

一種解決方案mvsed

for file in *; do echo mv "$file" "$(echo $file | sed 's/ - /_/g ; s/ /-/g')" ; done

刪除第一個回顯以送出更改。

測試

$ for file in *; do echo mv "$file" "$(echo $file | sed 's/ - /_/g ; s/ /-/g')" ; done
mv File one - some name - 01-05-2020 File-one_some-name_01-05-2020
mv File three - some name - 01-15-2020 File-three_some-name_01-15-2020
mv File two - some name - 01-07-2020 File-two_some-name_01-07-2020

使用 Larry Wall 的“perl rename”(rename在 Debian/Ubuntu 上,prename在 RHEL/Centos/Fedora 上):

rename -n -E 's/ - /_/g' -E 's/ /-/g' {file[s]} 

刪除-n(或替換為-v)以進行實際執行。

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