我有一堆这样命名的文件:
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
一种解决方案是mv
和sed
:
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
)以进行实际执行。