우분투에서 많은 수의 jpg 파일 이름을 재귀적으로 바꾸려면 명령이 필요합니다.
그러나 몇 가지 문제도 있습니다. 일반적인 파일 세트는 다음 과 같습니다 ani-estate-villas_1431640729_3.jpg
.ani-estate-villa_3627544278_7.jpg
ani-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!' {} \;