我有一个名为a_b-c-d-e-f.txt
. 我想采用当前名称并交换破折号和下划线,使其变为a-b_c_d_e_f.txt
.
我的直觉告诉我尝试rename
or tr
,但我对此有疑问。这是我目前的尝试
#!/bin/bash
for i in *.txt; do
[ -f "$i" ] || break
newFile=$(echo "$i" | tr '-' '_')
cp "$i" $newFile
done
有了这个,我最终得到
a_b_c_d_e_f.txt
不应该改变的是ab之间的那部分。此外,该破折号不一定总是在文件名中的那个位置。例如,它可能看起来像
a-b-c_d-e-f.txt
或者像这样的任何组合。我希望他们翻转不管他们在名字中的位置。
其他一些选项:
你的循环,但用 sed 很少使用的
y
音译命令代替tr
ex。基于 perl 的
rename
命令,使用 perl 的内置命令tr
(不需要 shell 循环)(删除
-n
当你高兴时它正在做正确的事情)。与
rename
(手动)只是这里有更多关于的信息
y/
,以及关于的相关帖子rename
我发现这行得通。这是我的帖子和托尼的回应的结合。