Bash - 가장 오래된 것부터 최신 것 순으로 파일을 이동하고 이름을 바꾸는 방법

Bash - 가장 오래된 것부터 최신 것 순으로 파일을 이동하고 이름을 바꾸는 방법

그래서 제가 작성하려고 하는 스크립트가 있습니다. 한 디렉터리에서 모든 .mp3 파일을 가져와 다른 디렉터리로 이동하고 0001.mp3, 0002.mp3 등과 같이 숫자 순서로 이름을 지정합니다.

i=0
for f in *.mp3; do
i=$((i+1));
mv "$f" "/home/jwt13/Testing/$(printf %04d $i).mp3";
done

이제 위의 명령이 파일의 이전 시간을 기준으로 이동하고 이름을 바꾸도록 노력하고 있습니다. 따라서 가장 오래된 파일의 이름을 0001로 지정하고 두 번째로 오래된 파일의 이름은 0002가 됩니다. 위의 스크립트를 사용하여 이 작업을 어떻게 수행할 수 있나요? 여기에 몇 줄을 추가할 수 있나요? 아니면 전체 내용을 다르게 다시 작성해야 하나요?

감사해요

답변1

*.mp3다음 과 같이 변경하면 됩니다 $(ls -rt *.mp3).

i=0
for f in $(ls -rt *.mp3); do
    i=$((i+1));
    mv "$f" "/home/jwt13/Testing/$(printf %04d $i).mp3";
done

-t-r가장 오래된 파일부터 수정 시간을 기준으로 파일을 정렬합니다 .

@Jeff가 언급했듯이 파일 이름에 이상한 문자가 포함되어 있으면 위 방법이 작동하지 않습니다. 이 경우 다음을 사용해야 합니다(여전히 개행 문자를 처리할 수 없습니다).

i=0
ls -rt *.mp3 |
while read -r f; do
    i=$((i+1));
    mv "$f" "/home/jwt13/Testing/$(printf %04d $i).mp3";
done

그 출력은 ls전체 while루프로 파이프됩니다.

관련 정보