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.jpg
image.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