숫자로 폴더 이름 일괄 변경

숫자로 폴더 이름 일괄 변경

plt라는 파일 이름을 일괄적으로 변경해야 합니까? ? ? plt로????.

500마다 0부터 99500까지의 숫자 순서로 되어 있지만 100,000개가 넘는 것도 있으므로 모두 6자리로 설정하고 싶습니다.

대상: 현재 - plt99500 대상 - plt099500

어떤 도움이라도 대단히 감사하겠습니다.

답변1

모든 파일이 동일한 디렉토리에 있다고 가정할 수 있다면 어떤 파일도 동일한 이름을 가질 수 없습니다(예: 이름이 없고 plt500이미 plt000500).모두이름에는 plt숫자만 포함되며 로 시작하는 모든 파일의 plt이름을 바꿔야 합니다. 그러면 다음을 수행할 수 있습니다.

for f in plt*; do
   numNoZero=$(sed 's/^0*//' <<<"${f/plt/}")
   echo mv -- "$f" "$(printf 'plt%06d' "$numNoZero")";
done

먼저 이름이 로 시작하는 모든 파일과 디렉터리를 반복하여(디렉토리를 건너뛰어야 하는지 알려주세요) 다음은 삭제된 파일 이름 plt이므로 숫자여야 합니다. 선행 0(있는 경우)을 제거하고 결과(선행 0이 없는 숫자)를 로 저장하는 명령을 통해 이 결과를 제공합니다 . 다음으로 를 사용하여 인쇄하도록 지시한 다음 6자리로 채워진 숫자를 인쇄합니다. ( ) 원하는 이름으로 사용하세요 .$f${f/plt/}pltsed$numNoZeroprintfplt%06dmv

이것이 올바른 것으로 보이면 삭제 echo하고 다시 실행하여 실제로 파일 이름을 바꾸십시오.

또는 Perl(Ubuntu 및 기타 Debian 시스템 등에서는 Perl이라고 함 rename)이 있는 경우 다음을 수행할 수 있습니다.renameperl-renameprename

rename -n 's/plt0*(\d+?)$/sprintf("plt%06d", "$1")/e' plt*

답변2

사용진주의rename(모든 운영 체제에서 작동):

rename -n 's/\d+/sprintf "%06d", $&/e' ./plt[0-9]*

스위치 삭제 -n, 일명.시운전당신의 시도가 만족스러울 때실제 이름으로 변경.

관련 정보