여러 파일의 기본 주소(확장자 아님)의 마지막 10자를 변경합니다.

여러 파일의 기본 주소(확장자 아님)의 마지막 10자를 변경합니다.

길이는 다르지만 확장자는 동일한 파일이 많으며 모든 파일의 이름을 한 번에 바꾸기 위해 많은 명령을 시도했습니다.

모든 파일 이름의 마지막 10자만 변경할 수 있나요? 마지막 10자는 항상 동일합니다.

예를 들어:

img(12345678).txt
test(12345678).txt 
download(12345678).txt
upload(12345678).txt

(12345678)나는 로 교체하고 싶다abcdefghij

답변1

rename배포판에는 일반적으로 두 가지 Linux 명령이 사용됩니다. 나는 더 강력하기 때문에 Perl 기반 이름 바꾸기를 선호합니다. 어떤 것을 사용하고 있는지 확인할 수 있습니다 $ prename --version.

Perl 기반 이름 바꾸기가 있는 경우

$ rename --version
perl-rename 1.9
$ rename 's/\(12345678\)/abcdefghij/' *.txt

-n먼저 테스트 실행으로 확인하려면 이 플래그를 사용하세요 .

다른 이름으로 변경한 경우

$ rename --version
rename from util-linux 2.26.2
$ rename '(12345678)' abcdefghij *.txt

.txt일반적으로 이전의 마지막 10자를 제거합니다.

문자가 항상 동일하지 않은 경우 일반적인 경우에 사용할 수 있습니다.

Perl 기반 이름 바꾸기의 경우

rename 's/.{10}\.txt\Z/abcdefghij.txt/' *.txt -n

다른 이름 변경의 경우 가능한지 확실하지 않습니다.

답변2

이 시도. 권장 조치에 만족한다면 삭제 echo하고 다시 실행하세요.

$ ls
download(12345678).txt  img(12345678).txt  upload(12345678).txt
$ for F in *; do echo mv "$F" "${F/(12345678)/abcdefghij}"; done
mv download(12345678).txt downloadabcdefghij.txt
mv img(12345678).txt imgabcdefghij.txt
mv upload(12345678).txt uploadabcdefghij.txt
$

답변3

bash// 설치되지 않은 유틸리티로 되돌리지 않고 dash이 작업을 수행 하기만 하면 됩니다 . zsh존재하다 bash:

for x in *"(12345678).txt"; do mv "$x" "${x%(12345678).txt}"abcdefghij.txt; done

성냥을 제거하는 데 $x%pattern충분합니다 . From man bash:

   ${parameter%word}
   ${parameter%%word}
          Remove matching suffix pattern.  The word is expanded to produce
          a pattern just as in pathname expansion.  If the pattern matches
          a  trailing portion of the expanded value of parameter, then the
          result of the expansion is the expanded value of parameter  with
          the  shortest  matching  pattern (the ``%'' case) or the longest
          matching pattern (the ``%%'' case) deleted.  If parameter  is  @
          or  *,  the  pattern  removal operation is applied to each posi‐
          tional parameter in turn, and the  expansion  is  the  resultant
          list.   If  parameter is an array variable subscripted with @ or
          *, the pattern removal operation is applied to  each  member  of
          the array in turn, and the expansion is the resultant list.

답변4

노력하다

 ls |  awk '{printf "mv %s %s\n",$0,gsub("(12345678)","abcedfgh" );}' | bash

관련 정보