用于拆分和反转文件名的bash脚本

时间:2013-05-24 17:27:40

标签: bash

bash脚本请求(或鱼脚本)。我有一堆文件,如:

name - lastname.info
names  - lastnames.info
name & name - lastname & lastname.info

但我想将所有这些改为:

lastname - name.info
lastnames - names.info
lastname & lastname - name & name - lastname & lastname.info

3 个答案:

答案 0 :(得分:2)

根据您的示例数据,您有" - "作为分隔符,所以

for file in *; do
    ext=${file##*.}
    no_ext=${file%.*}
    name=${no_ext% - *}
    lastname=${no_ext##* - }
    mv "$file" "$lastname - $name.$ext"
done

有关血腥的详细信息,请参阅http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

答案 1 :(得分:1)

您可以使用for循环遍历cwd中的所有文件,然后使用cut实用程序根据' - '分隔符解析文件名以获取名字和姓氏(然后我-cut解析文件扩展名),然后使用tr删除前导/尾随空格。最后连接,你有了新的文件名:

for file in *
do
    fname=`echo $file | cut -d '-' -f 1 | tr -d ' '`
    lname=`echo $file | cut -d '-' -f 2 | cut -d '.' -f 1 | tr -d ' '`
    newname=$lname' - '$fname.info
    echo $newname
done

答案 2 :(得分:-1)

假设您的所有文件都在一个目录中:

for f in lastname*
do
    mv $f `echo $f | sed 's/lastname/name/'`
done

如果您的文件位于层次结构中的任何位置,则必须使用find命令,但基本想法仍然存在。