구두점 및 번호 매기기를 변경하려면 파일 이름을 바꾸세요.

구두점 및 번호 매기기를 변경하려면 파일 이름을 바꾸세요.

우분투에서 많은 수의 jpg 파일 이름을 재귀적으로 바꾸려면 명령이 필요합니다.

그러나 몇 가지 문제도 있습니다. 일반적인 파일 세트는 다음 과 같습니다 ani-estate-villas_1431640729_3.jpg.ani-estate-villa_3627544278_7.jpgani-estate-villa_3143254376_5.jpg

-모두 를 로 바꾸고 _모든 숫자를 제거한 다음 각 디렉토리에서 재설정되는 숫자를 추가해야 합니다. 따라서 동일한 파일 세트는 ani_estate_villas_1.jpg, ani_estate_villas_2.jpg, ani_estate_villas_3.jpg및 다른 디렉토리의 다른 파일과 같아야 합니다.

재귀의 깊이는 1~2개의 디렉터리 깊이이므로 찾을 수도 있고 directory/file.jpg거의 directory/directory/file.jpg무작위일 수도 있습니다.

jpg가 포함된 모든 디렉터리에서 명령을 실행해도 작동하므로 누구든지 이러한 특성을 가진 모든 파일의 이름을 바꾸는 방법을 알고 있다면 문제가 되지 않습니다. 명령을 실행하는 것이 더 멋지긴 하지만, 400개가 넘는 jpg 파일을 수동으로 변경하는 것은 너무 많기 때문에 더 반복적인 솔루션이 정말 감사하겠습니다.

krename을 사용해 보았지만 내 파일이 삭제되었습니다.

답변1

당신은 그것을 사용할 수 있습니다prename작성된 변환을 기반으로 파일 이름을 바꾸는 명령진주.

간단하게 시작해 보겠습니다. .jpg디렉토리의 모든 파일 이름을 바꾸 려면 모든 파일을 -로 변경하십시오 _.s운영자(우리는 또한 사용할 수 있습니다tr). Perl 코드를 실행하여 각 파일 이름을 변환합니다.

prename 's!-!_!g' *.jpg

끝에 있는 숫자 순서를 간단한 카운터로 변경하려면 카운터 변수를 도입합니다. 나는 전역 변수를 $a카운터로 사용합니다(추가 변수를 도입하는 것은 더 복잡합니다). 정규식은 (\.[^/.]*)$파일 확장자와 일치하며 $1대괄호로 묶인 그룹이 대체 텍스트에서 일치하는 항목을 나타냅니다.

prename 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' *.jpg

파일 이름은 filename 인수에 지정된 순서대로 이름이 변경됩니다. 즉, 확장 순서에 따라 *.jpg파일 번호가 결정됩니다.

또는 block을 사용하여 명시적으로 카운터를 초기화할 수 있습니다 BEGIN.

prename 'BEGIN {$a = 1;} s!-!_!g; s!_[0-9_]+(\.[^/.]*)$!_$a$1!; ++$a;' *.jpg

현재 디렉터리의 모든 하위 디렉터리에서 이 작업을 수행하려면 다음을 호출하세요.find.

find -type d -exec sh -c 'cd "$1" && prename "$0" *.jpg' 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' {} \;

관련 정보