길이는 다르지만 확장자는 동일한 파일이 많으며 모든 파일의 이름을 한 번에 바꾸기 위해 많은 명령을 시도했습니다.
모든 파일 이름의 마지막 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