如何使用bash重命名ubuntu子文件夹中的所有文件?

时间:2018-07-20 14:19:36

标签: bash ubuntu

我的文件夹结构如下:

data
├───sub_data1
│   ├──12_abc.jpg
│   ├──24_abc.jpg
│   └──25_abc.jpg
│
└──sub_data2
    ├──123_abc.jpg
    ├──244_abc.jpg
    └──255_abc.jpg

其中data是根文件夹,它包含两个子文件夹sub_data1sub_data2。在这些子文件夹中,我有很多格式为number_abc.jpg的jpg文件。我想编写一个脚本将名称从number_abc.jpg更改为number_xyz.jpg。该脚本使用bash编写,并且具有一个参数来选择根文件夹的路径(例如data)。我该怎么办?我找到了一些例子,但我无法适应我的情况:

#!/bin/bash
for file in *
do
    # separate the file name from its extension
    if [[ $file == *.* ]]; then
      ext="${file##*.}"
      fname="${file%.*}"
      mv "$file" "${fname}_xyz.$ext"
    else
      mv "$file" "${file}_xyz"
    fi
done

2 个答案:

答案 0 :(得分:2)

这是完成工作的简单方法(感谢Gem Taylor的评论):

rename 's/abc/xyz/' */*

答案 1 :(得分:-1)

for f in */*; do fp=$(dirname "$f");  ff=$(basename "$f") ; mv ~/Desktop/files/$fp/$ff ~/Desktop/files/$fp/newName.jpg ; done;