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/}
plt
sed
$numNoZero
printf
plt
%06d
mv
이것이 올바른 것으로 보이면 삭제 echo
하고 다시 실행하여 실제로 파일 이름을 바꾸십시오.
또는 Perl(Ubuntu 및 기타 Debian 시스템 등에서는 Perl이라고 함 rename
)이 있는 경우 다음을 수행할 수 있습니다.rename
perl-rename
prename
rename -n 's/plt0*(\d+?)$/sprintf("plt%06d", "$1")/e' plt*
답변2
사용진주의rename
(모든 운영 체제에서 작동):
rename -n 's/\d+/sprintf "%06d", $&/e' ./plt[0-9]*
스위치 삭제 -n
, 일명.시운전당신의 시도가 만족스러울 때실제 이름으로 변경.