아래와 같은 이름을 가진 파일이 여러 개 있습니다.
2313_ABCDEAUG2014_PQRST_0_.pdf
3244_ABCDEAUG2014_PQRST_0_.pdf
4234_ABCDEAUG2014_PQRST_0_.pdf
다음 형식으로 파일 이름을 바꾸고 싶지 않습니다.
AZ-2014-08-2313.pdf
AZ-2014-08-3244.pdf
제안해주세요.
답변1
perl-rename
작업을 간단하게 수행할 수 있는 매우 멋지다고 생각되는 소프트웨어가 있습니다 .
perl-rename 's/^(.*)_.*AUG2014.*/AZ-2014-08-$1.pdf/' *.pdf
HTH, 건배,
답변2
파일 이름에 작은따옴표나 개행 문자가 포함되어 있지 않은 경우:
ls | sed -n "s/$/:JAN1FEB2MAR3APR4MAY5JUN6JUL7AUG8SEP9OCT10NOV11DEC12/
s/\(\(.*\)_.*\(...\)\([0-9]\{4\}\)_.*\):.*\3\([0-9]*\).*/mv -i -- '\1' 'AZ-\4-\5-\2.pdf'/p"
| sh
실제 이름 바꾸기를 추가합니다 .
sed
이는 일부 번역을 수행하기 위해 일반적인 트릭을 사용하는 것입니다 (여기 AUG
-> 8
).
JAN1FEB2...
패턴 공간의 끝에 매핑 테이블(여기)을 추가하고 조회를 위해 역참조( )를 사용 합니다 \(...\).*\1\([0-9]*\)
. 우리는 매핑 테이블에서 그 뒤에 오는 숫자의 순서 대로 AUG
캡처 \3
하고 가져오고 있습니다.\5
\3
답변3
다음은 모든 PDF 파일을 반복하여 새로운 이름 형식으로 복사하고 원본 파일을 유지하여 요구 사항을 충족하는지 확인할 수 있습니다.
for file in $(ls *AUG2014*pdf) ; do newName=$(echo $file | awk -F_ '{ print $1 }') ; cp $file AZ-2014-08-$newName.pdf ; done
ls *AUG2014*pdf
- Aug2014를 포함하고 pdf로 끝나는 모든 파일을 나열합니다.
for aString in <list> ; do someCommand $aString ; done
- 각각 aString으로 참조되는 목록의 모든 요소를 반복합니다. aString을 참조하기 전에 달러 기호 $를 사용하십시오.
awk -F_
- "_" 구분 기호를 기준으로 문자열을 토큰으로 분할합니다. 위 명령은 첫 번째 토큰을 인쇄합니다.
동일한 번호로 시작하는 파일이 여러 개 있지 않도록 주의하세요. 존재하는 경우 두 개의 파일을 동일한 파일 이름으로 복사하여 하나가 다른 파일을 덮어쓸 수 있습니다. 이전 파일 수와 새 파일 수를 확인하십시오.
답변4
filelist='2313_ABCDEAUG2014_PQRST_0_.pdf 3244_ABCDEAUG2014_PQRST_0_.pdf 4234_ABCDEAUG2014_PQRST_0_.pdf'
for i in $filelist; do
id=$(echo $i|awk -F_ '{print $1}');
mv $i AZ-2014-08-$newname.pdf;
done
연도 또는 월이 다를 수 있습니다. 이 경우 새 이름을 만들려면 보존하려는 이름의 다른 부분을 추출해야 합니다.