파일을 백업하고 사용한 파일을 덮어쓰는 것을 방지하기 위해 스크립트를 사용하고 있습니다 cp --backup
. 이로 인해 example.mov.orig
및 test.mov.orig
. 나는 정규식을 전혀 알아낼 수 없으며 이름 바꾸기를 사용하여 기본 이름을 잘라내어 .orig
추가하는 방법을 아는 사람이 있는지 궁금합니다._1
본질적으로 내가 찾고 있는 결과는 example.mov.orig
내가 example_1.mov
결합할 수 있는 것으로 변경되는 명령입니다.find /example/ -name *.*.orig
출력 은 다음 rename --version
과 같습니다util-linux-ng 2.18
답변1
필요한 명령은 rename
다음과 같습니다.
다음을 사용
rename
하는 경우util-linux
:rename . _1. *.orig && rename .orig '' *.orig
.으로 끝나는 모든 파일의 경우 첫 번째 항목이 첫 번째 항목을 대체합니다
.
. 두 번째 항목은 파일 이름에서 제거됩니다._1.
.orig
.orig
perl-rename(Debian 기반 시스템의 기본값)을 사용하면 상황이 훨씬 더 간단해집니다. Perl 호환 정규 표현식을 사용하므로 모든 작업을 한 단계로 수행할 수 있기 때문입니다.
rename 's/(\..*)\.orig/_1$1/' *orig
이 버전은 정규식을 사용하기 때문에 첫 번째
.
(\.
,.
ti 는 이스케이프되지 않은 "모든 문자"를 의미하므로 이스케이프해야 함)와 일치.*
한 다음 까지의 모든 항목 ( ) 과 일치합니다.orig
. 첫 번째 패턴은 괄호 안에 있으므로 "캡처"되어 나중에 호출할 수 있습니다$1
. 따라서 교체는_1
이전에 a 및 캡처된 패턴(첫 번째 확장자)과 일치하는 모든 항목을 대체하고 동시에 제거합니다.orig
.
다음과 명령을 결합 할 수 있습니다 find
.
find /example -name '*.orig' -exec rename . _1. {} +
find /example -name '*.orig' -exec rename .orig '' {} +
또는:
find /example -name '*.orig' -exec rename 's/(\..*)\.orig/_1$1/'
이것도 필요하지 않습니다 find
. 모든 파일이 동일한 디렉터리에 있는 경우 위 명령을 직접 사용하거나 재귀적으로 만들 수 있습니다(bash를 사용한다고 가정).
shopt -s globstar ## make ** recurse into subdirectories
rename.ul . _1. **.orig && rename.ul .orig '' **.orig ## util-linux
rename 's/(\..*)\.orig/_1$1/' **orig ## perl rename
실제로 기술적으로는 그럴 필요조차 없습니다 rename
. 셸에서 모든 작업을 수행할 수 있습니다(참조:여기쉘의 문자열 조작 기능에 대한 참고사항):
for file in **/*.orig; do
newname="${file%%.*}_1.${file#*.}"
mv "$file" "${newname/.orig/}"
done
마지막으로 glob에 대한 참고 사항(-name
정규 표현식이 아닌 glob을 사용하세요.). *.*.orig
Windows glob 구문은 " .orig
"로 끝나는 모든 것을 의미합니다. 이에 상응하는 것과 함께 사용해야 하는 것은 find
입니다 *.orig
. *
단독으로 사용하면 무엇이든 일치하며, 사용되면 *.*.orig
두 개의 확장자를 가진 파일 이름만 일치합니다. 마지막 확장자는 .orig
.
답변2
먼저 시스템에 어떤 버전의 이름 바꾸기가 설치되어 있는지 확인해야 합니다.
readlink -e $(which rename)
따라서 prename
(.deb 호스트의 기본값):
prename 's/(\.[^.]*)\.orig/_1$1/' *.*.orig
rename.ul
util-linux 패키지 에서
rename.ul \. _1\. *.*.orig #add «_1» into file name
rename.ul \.orig '' *.*.orig #remove «.orig» extention