【问题标题】:Linux rename files based on another file in the directory?Linux根据目录中的另一个文件重命名文件?
【发布时间】:2011-05-26 10:02:25
【问题描述】:
我有大约 750 个目录,每个目录包含两个文件:
long_somewhat_random_filename.jpg
thumb.jpg
我想做的是使用find 或类似的东西将thumb.jpg 重命名为long_somewhat_random_filename_thumb.jpg。此刻我的大脑有点模糊。
我可以使用 perl 脚本来完成,但如果在 bash 中有一种简单的方法,那就更容易了。
【问题讨论】:
标签:
linux
bash
batch-rename
【解决方案1】:
试一下下面的脚本。现在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