Linux根据目录中的另一个文件重命名文件?

Rob*_*ams 9 linux bash batch-rename

我有大约750个目录,每个目录包含两个文件:

long_somewhat_random_filename.jpg
thumb.jpg
Run Code Online (Sandbox Code Playgroud)

我想要做的就是使用find或类似的重命名的东西thumb.jpglong_somewhat_random_filename_thumb.jpg.此刻我的大脑有点模糊.

我可以用perl脚本来做,但如果在bash中有一个简单的方法,那就更容易了.

Sie*_*geX 10

在下面给出一个镜头.现在它echo使它成为良性,所以你可以尝试在你购买之前说.如果您喜欢所看到的内容,请删除echo并再次运行脚本以实际进行更改.

#!/bin/bash

while read file; do
 echo mv "${file%/*}/thumb.jpg" "${file%.*}_thumb.jpg"
done < <(find . -type f ! -name "thumb.jpg" -name "*.jpg")
Run Code Online (Sandbox Code Playgroud)

输入

$ find . -type f -name "*.jpg"
./dir1/dir1_foo_bar.jpg
./dir1/thumb.jpg
./dir2/dir2_foo_bar.jpg
./dir2/thumb.jpg
./dir3/dir3_foo_bar.jpg
./dir3/thumb.jpg
./dir4/dir4_foo_bar.jpg
./dir4/thumb.jpg
./dir5/dir5_foo_bar.jpg
./dir5/thumb.jpg
Run Code Online (Sandbox Code Playgroud)

产量

$ ./mvthumb.sh
mv ./dir1/thumb.jpg ./dir1/dir1_foo_bar_thumb.jpg
mv ./dir2/thumb.jpg ./dir2/dir2_foo_bar_thumb.jpg
mv ./dir3/thumb.jpg ./dir3/dir3_foo_bar_thumb.jpg
mv ./dir4/thumb.jpg ./dir4/dir4_foo_bar_thumb.jpg
mv ./dir5/thumb.jpg ./dir5/dir5_foo_bar_thumb.jpg
Run Code Online (Sandbox Code Playgroud)