如何交换文件名的两个部分

时间:2016-07-25 00:13:50

标签: bash scripting

我有一堆像这样的文件名

name-id.ext

我希望在文件中交换id和name,以便命名为

id-name.ext

这似乎有效,唯一的问题是它也会交换文件扩展

for file in *; do echo "${file#*-}-${file%-*}"; done

1 个答案:

答案 0 :(得分:3)

这可以通过以下方式实现:

  • 正则表达式组,用于检测要交换的文件名的两个部分: '^(.*)-(.*)\.ext'

  • sed将第一部分与第二部分交换: sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/'

  • echo将旧文件名传输到sed:echo $file | sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/'
  • 将其存储在变量中:newname=$(echo $file | sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/')
  • mv可以使用上一个点中的块作为新名称:mv $file $newname

  • 整个事情可以包含在循环中以遍历文件:

    for file in *ext; do newname=$(echo $file | sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/'); mv $file $newname; done;