Chistory
리눅스 명령어 3. 파일명 일괄변경? 본문
다량의 파일의 확장자를 유지한 체, 번호로 된 이름으로 변경하고 싶을 때가 있다.
흔히 검색해보면 mv를 이용한 파일명 변경과, rename에서 정규식을 약간 활용하는 정도를 설명해준다.
하지만 쉘스크립트를 짤 줄 안다면, 쉽게 여러 스타일로 이름을 지을 수 있다.
모든 파일의 이름을 일괄 변경하기는 쉽다. 다음과 같이 할 수 있을 것이다.
#!/bin/bash
cur=`pwd`
cd $1
file_list=(`ls`)
count=0
for filename in ${file_list[@]}
do
change_filename=`printf "%3d" $count`
mv $filename $change_filename
count=$($count+1)
done
cd $cur
위 스크립트는, 첫번째 인자로 들어온 디렉토리에 들어간 뒤에, 모든 파일 리스트를 읽는다.
그 후에, count라는 변수의 값을 3자리수 정수를 출력하는 printf 명령어를 태워서, 그 숫자로 파일명을 바꾼다.
만약 확장자가 일정하다면, mv 뒤에 ${chang_filename}.jpg 같이 하면 확장자도 유지할 수 있을것이다.
시간 순으로 정렬하고싶다면 ls -s 등의 옵션으로 파일리스트를 가져오거나, 다른 다양한 방법으로 파일 리스트를 가져올 수 있을것이다.
그런데, 만약에 난잡한 사진과 동영상이 섞인 파일 리스트에 대해 이름을 정리하고싶다면?
아래 스크립트는 그것을 일부 해결해준다.
#!/bin/bash
cur=`pwd`
cd $1
file_list=(`ls`)
for filename in ${file_list[@]}
do
mimetype=`file -i $filename`
if [ `echo "$mimetype" | grep mp4 | wc -l ` -eq 1 ]; then
suf="mp4"
elif [ `echo "$mimetype" | grep x-msv | wc -l ` -eq 1 ]; then
suf="avi"
elif [ `echo "$mimetype" | grep quick | wc -l ` -eq 1 ]; then
suf="mov"
elif [ `echo "$mimetype" | grep x-m4v | wc -l ` -eq 1 ]; then
suf="m4v"
elif [ `echo "$mimetype" | grep jpeg | wc -l ` -eq 1 ]; then
suf="jpeg"
fi
mv $filename $filename.$suf
done
cd $cur
file 명령어는 파일의 헤더를 읽고, 어떤 종류의 파일인지를 알려준다. 각 파일들에 대해 file 명령어를 사용해보고,
거기서 유추할 수 있는 결과를 가져와 조건문을 만들었다. 이렇게 하면, 파일에 알맞는 확장자를 붙여줄 수 있다.
'개발 & CS > Linux' 카테고리의 다른 글
프록시 솔루션간단 비교.. (0) | 2020.01.03 |
---|---|
haproxy libssl 에러 (0) | 2020.01.03 |
리눅스 명령어 2. test와 if (0) | 2019.12.05 |
리눅스 명령어 1. dd (0) | 2019.12.03 |
쉘스크립트 (0) | 2019.09.16 |
Comments