이름 바꾸기를 사용하여 파일에서 ".orig"를 제거하고 기본 이름에 "_1"을 추가합니다.

이름 바꾸기를 사용하여 파일에서 ".orig"를 제거하고 기본 이름에 "_1"을 추가합니다.

파일을 백업하고 사용한 파일을 덮어쓰는 것을 방지하기 위해 스크립트를 사용하고 있습니다 cp --backup. 이로 인해 example.mov.origtest.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을 사용하세요.). *.*.origWindows glob 구문은 " .orig"로 끝나는 모든 것을 의미합니다. 이에 상응하는 것과 함께 사용해야 하는 것은 find입니다 *.orig. *단독으로 사용하면 무엇이든 일치하며, 사용되면 *.*.orig두 개의 확장자를 가진 파일 이름만 일치합니다. 마지막 확장자는 .orig.

답변2

먼저 시스템에 어떤 버전의 이름 바꾸기가 설치되어 있는지 확인해야 합니다.

readlink -e $(which rename)

따라서 prename(.deb 호스트의 기본값):

prename 's/(\.[^.]*)\.orig/_1$1/' *.*.orig

rename.ulutil-linux 패키지 에서

rename.ul \. _1\. *.*.orig     #add «_1» into file name
rename.ul \.orig '' *.*.orig   #remove «.orig» extention

관련 정보