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

如何使用bash重命名ubuntu子文件夹中的所有文件?,bash,ubuntu,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_data1和sub_data2。在这些子文件夹中,我有许多格式为number\u abc.jpg的jpg文件。我想编写一个脚本,将名称从

我的文件夹结构如下:

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_data1
sub_data2
。在这些子文件夹中,我有许多格式为
number\u abc.jpg
的jpg文件。我想编写一个脚本,将名称从
number\u abc.jpg
更改为
number\u 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

这是完成上述工作的简单方法(感谢您的评论):


您知道如何使用
mv
而不是
rename
,因为rename的语法非常复杂吗?在这种情况下,
rename
可以(可能)执行您想要的操作!我不明白你说的话。我使用了上面的代码,它无法重命名我的文件。请尝试键入
man rename
是否像
rename's/abc/xyz/'*
。我用它,但没有任何改变,我认为上面的命令工作,但我必须cd到子文件夹。我可以在根文件夹中完成吗?感谢您提供的这段代码片段,它可能会提供一些有限的、即时的帮助。A通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。
rename 's/abc/xyz/' */*
for f in */*; do fp=$(dirname "$f");  ff=$(basename "$f") ; mv ~/Desktop/files/$fp/$ff ~/Desktop/files/$fp/newName.jpg ; done;