다음과 같은 이미지 파일이 많이 있습니다.
a.png, b.png, c.png, etc
다음과 같은 숫자에 대한 파일 이름 매핑이 포함된 파일이 있는 경우(형식을 무시하면 무엇이든 가능):
a=>1
b=>2
c=>3
...
맵 파일을 사용하여 모든 파일의 이름을 일괄적으로 바꾸는 쉬운 방법이 있습니까?
1.png, 2.png, 3.png, etc
유닉스/리눅스 명령을 찾고 있습니다. 나는 매우 간단한 스크립트를 작성할 수 있다는 것을 알고 있지만 다른 기술이 있는지 궁금합니다.
감사해요
답변1
명령 없음모든 것;이것이 스크립트 가능한 쉘을 갖는 요점입니다.
while read -r old new; do
mv "$old.png" "$new.png"
done < map.txt
답변2
sed가 없으면 bash에서 다음 대체를 수행할 수 있습니다.
for line in $(< patterns) ; do echo "Pattern: " $line " char: " ${line/=>*/} " nr: " ${line/*=>/}; done
("패턴"은 a=>1 등의 파일이 됩니다) 결과는 다음과 같습니다.
for line in $(< patterns) ; do
c=${line/=>*/}
n=${line/*=>/}
mv $c.png $n.png
done
bash 맨페이지에는 "String Substitution" 아래에 이 옵션과 기타 흥미로운 옵션이 나열되어 있습니다.
어쩌면 Perls rename
도 흥미로운 옵션일 수 있습니다. 스키마를 사용하여 대규모 이름 변경이 가능합니다.
rename 's/^a/1/' a*png
우분투에서는 Perl 패키지인 afaik이 함께 제공됩니다.
답변3
펄 방식은 다음과 같습니다.
cat mapfile | perl -e 'my$h={eval join(",",<>)};while (($k,$v)=each%$h){`mv $k.png $v.png`}'
두 번째 시도:
perl -nle '(@a=map{s/^\s+//;s/\s+$//;s/'/\\'/g;$_}split/\s*=>\s*/,$_,2)and`mv \'$a[0].png\' \'$a[1].png\'`'
적용 대상:
Someone's $tupid file name => renamed by "simple" script?!