유닉스에서 여러 파일의 이름 바꾸기

유닉스에서 여러 파일의 이름 바꾸기

아래와 같은 이름을 가진 파일이 여러 개 있습니다.

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

연도 또는 월이 다를 수 있습니다. 이 경우 새 이름을 만들려면 보존하려는 이름의 다른 부분을 추출해야 합니다.

관련 정보