根据条件仅重命名每个目录中的一个文件

根据条件仅重命名每个目录中的一个文件

我有 100 个文件夹,每个文件夹内有一个或两个文件,名称如下:

XXX_001_014_max.jpg
XXX_001_024_max.jpg

我将文件夹名称保存在文件“list.txt”中

我运行以下代码来立即重命名文件夹内的文件:

#!/bin/bash
for i in $(cat list.txt); do
mv ${i}/XXX_001_014_max.jpg ${i}/image.jpg
done

我的目标是仅将文件重命名XXX_001_014_max.jpgimage.jpg ,如果该文件不存在(即文件夹内只有一个文件),那么我希望代码将第二个文件重命名XXX_001_024_max.jpgimage.jpg

我知道如何使用命令重命名文件mv,但我不熟悉if这种情况下语句的确切用法。

答案1

避免这种for i in $(cat squeeze)构造 - 如果您的任何目录名称包含,它将失败IFS字符...
我会将这些行读入一个数组,然后简单地重命名每个目录中的第一个文件。自从你总是有一两个文件在每个目录中,这意味着重命名每个目录中的第一个目录应该可以完成这项工作 - 例如bash

mapfile -t mylist <list.txt
for i in "${mylist[@]}"
do
set -- "$i"/*
echo mv -- "$1" "$i"/image.jpg
done
set --

echo如果您对结果满意,请删除。

答案2

if [ -f XXX_001_014_max.jpg ]
then
  SOURCE=XXX_001_014_max.jpg
else
  SOURCE=XXX_001_024_max.jpg
fi
mv $SOURCE image.jpg

答案3

if [ -f XXX_001_014_max.jpg ] 
then
    mv XXX_001_014_max.jpg image.jpg
else 
    mv XXX_001_024_max.jpg image.jpg
fi

相关内容