Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux是否基于目录中的另一个文件重命名文件?_Linux_Bash_Batch Rename - Fatal编程技术网

Linux是否基于目录中的另一个文件重命名文件?

Linux是否基于目录中的另一个文件重命名文件?,linux,bash,batch-rename,Linux,Bash,Batch Rename,我有大约750个目录,每个目录包含两个文件: long_somewhat_random_filename.jpg thumb.jpg 我想做的是使用find或类似于将thumb.jpg重命名为long\u有点随机\u文件名\u thumb.jpg。我的大脑现在有点模糊 我可以用一个perl脚本来完成,但是如果在bash中有一种简单的方法,那就更容易了。让下面的脚本试一试。现在,echo使其成为良性的,因此您可以在购买之前试一试。如果您喜欢看到的内容,请删除echo,然后再次运行脚本以实际进行更

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

long_somewhat_random_filename.jpg
thumb.jpg
我想做的是使用
find
或类似于将
thumb.jpg
重命名为
long\u有点随机\u文件名\u thumb.jpg
。我的大脑现在有点模糊


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

让下面的脚本试一试。现在,
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