如何使用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;