基于目录中的另一个文件,如何在Linux中重命名文件?

9

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

long_somewhat_random_filename.jpg
thumb.jpg

我想要做的是使用find或类似的东西将thumb.jpg重命名为long_somewhat_random_filename_thumb.jpg。我现在有点脑子不太清楚。
我可以用perl脚本来完成,但如果有一种相对容易的方法可以在bash中完成,那会更简单。
1个回答

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")

输入

$ 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

输出

$ ./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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接