重命名文件在第四个和第六个字符后添加破折号

重命名文件在第四个和第六个字符后添加破折号

我有一些文件,例如:

20150716_something-here
20150716_something-heretoo
20150716_something-hereaswell

它们需要重命名为

2015-07-16_something-here
2015-07-16_something-heretoo
2015-07-16_something-hereaswell

我尝试使用Perl 实现rename命令(请参阅我对已接受答案的评论)但我没有成功。

答案1

使用 bash 的内置子字符串扩展:

for f in 2015* ; do
  mv "$f" "${f::4}-${f:4:2}-${f:6}"
done

答案2

sed

LC_ALL=C sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/' <file

答案3

尽管rename它是一个非常强大的工具,但我通常更喜欢它的简单性mmv(多次移动)实用程序:

mmv '????????_*' '#1#2#3#4-#5#6-#7#8_#9'

搜索模式中的?代表单个字符,*代表任意长的字符序列。在替换模式中,every#<number>代表搜索模式中对应的?or 。*除了 和 之外?*mmv支持括号内的字符范围(如[a-f])。

mmv将在开始工作之前测试重命名中的任何冲突,这样您就不会因为覆盖而丢失文件。)

答案4

在我的发行版上,我有一个perl-rename命令,它可以使用 perl 样式的正则表达式来批量重命名文件。该rename命令仅接受一对固定字符串进行重命名。

相关内容