替换文件名中的单个空格和空格之间的连字符

替换文件名中的单个空格和空格之间的连字符

我有一堆这样命名的文件:

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。

答案1

一种解决方案是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

答案2

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

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

删除-n(或替换为-v)以进行实际执行。

相关内容