Bash 스크립트: 파일 날짜 순서로 폴더의 파일 이름 바꾸기

Bash 스크립트: 파일 날짜 순서로 폴더의 파일 이름 바꾸기

예를 들어 파일 날짜 순서대로 파일 이름을 바꾸고 싶습니다.

file_1.pdf
file_2.pdf

도착하다:

file_1_ONE.pdf
file_2._TWO.pdf

스크립트는 첫 번째 파일의 이름을 파일 날짜별로 정렬된 "ONE"으로 바꿔야 합니다.

답변1

일부 BSD 시스템 (예: Ubuntu 시스템, 패키지에서 사용 가능 ) 에서 zsh셸 및 number유틸리티 사용:/usr/gamesbsdgames

number=1
for file in ./file_*.pdf(.Om); do
    mv "$file" "${file%.pdf}_$(number -l "$number" | tr '[:lower:]' '[:upper:]').pdf"
    number=$(( number + 1 ))
done

(.Om)이전 패턴 에 대한 zsh쉘별 수정자 입니다 . 패턴이 일반 파일의 파일 이름 목록으로 확장되고, mtime 타임스탬프(마지막 수정 시간)에 따라 정렬되고 가장 오래된 파일부터 정렬됩니다.

이 명령은 현재 값으로 호출되며 number -l "$number" | tr '[:lower:]' '[:upper:]', 등 해당 영어 단어를 대문자로 반환합니다 . 이렇게 하면 파일 이름 접미사 없이 밑줄이 파일 이름 앞에 추가되고 문자열이 끝에 추가됩니다.number$numberONETWOTHREE.pdf

또는 다음을 피하십시오 tr.

number=1
for file in ./file_*.pdf(.Om); do
    en_number=$(number -l "$number")
    mv "$file" "${file%.pdf}_${en_number:u}.pdf"
    number=$(( number + 1 ))
done

${en_number:u}$en_number(의 출력 )을 대문자로 변환 합니다 number. 수정자는 특정적이며 :u에 해당 합니다 .zsh${variable:u}${variable^^}bash

시험:

$ for name in file_{1..10}.pdf; do touch "$name"; sleep 2; done
$ ls -lt
total 4
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_10.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_9.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_8.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_7.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_6.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_5.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_4.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_3.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_2.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_1.pdf
-rw-r--r--  1 kk  wheel  163 Jan 31 13:26 script.sh
$ zsh script.sh
$ ls -lt
total 4
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_10_TEN.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_9_NINE.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_8_EIGHT.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_7_SEVEN.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_6_SIX.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_5_FIVE.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_4_FOUR.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_3_THREE.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_2_TWO.pdf
-rw-r--r--  1 kk  wheel    0 Jan 31 13:28 file_1_ONE.pdf
-rw-r--r--  1 kk  wheel  163 Jan 31 13:26 script.sh

답변2

이 스크립트는 증가하는 카운터와 함께 생성 시간 순서대로 현재 폴더에 있는 각 파일의 이름을 나열합니다. echo필요한 작업을 수행하도록 줄을 변경하십시오 :)

#!/bin/bash

((counter=1))

for f in $(ls -1ct); do
    echo $f-$counter
    ((counter+=1))
done

관련 정보