조건에 따라 각 디렉터리에서 하나의 파일만 이름을 바꿉니다.

조건에 따라 각 디렉터리에서 하나의 파일만 이름을 바꿉니다.

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.jpg로 바꾸는 것입니다. 파일이 존재하지 않는 경우(즉, 폴더 안에 파일이 하나만 있는 경우) 두 번째 파일의 이름을 다음으로 image.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

관련 정보