명령줄에서 파일에 번호를 매기고 각 폴더를 다시 시작하시겠습니까?

명령줄에서 파일에 번호를 매기고 각 폴더를 다시 시작하시겠습니까?

나는 작은 스크립트를 사용하여 파일 번호를 매깁니다. 나는 맞춤 작업으로 시작했습니다 thunar. 모든 파일이 동일한 디렉토리에 있는 경우에만 작동합니다. 새 파일 이름은 5개의 파일 이름을 바꾸 00001.ext었을 때의 이름입니다 00005.ext. krename각 폴더마다 다시 시작하는 옵션이 있습니다.

내가 이것을 가질 때

/path/to/folder1/file1
/path/to/folder1/file2
/path/to/folder2/file1
/path/to/folder2/file2

내 스크립트가 이것을 생성합니다

/path/to/folder1/00001
/path/to/folder1/00002
/path/to/folder1/00003
/path/to/folder2/00004
               ^
           folder two

내가 원하는 건

/path/to/folder1/00001
/path/to/folder1/00002
/path/to/folder1/00003
/path/to/folder1/00004
               ^
           folder 1

파일 이름을 바꾸고 새 폴더마다 다시 시작할 수 있는 명령줄 도구가 있습니까?

답변1

사용진주의rename(모든 운영 체제에서 작동):

rename -n 's!folder\d+/.*!sprintf "folder1/%05d", ++$MAIN::c!se' ./folder*/*
$ tree folder*
folder1
├── 00001
├── 00002
├── 00003
└── 00004
folder2

스위치 삭제 -n, 일명.시운전당신의 시도가 만족스러울 때실제 이름으로 변경.

더 깊게:

다음을 사용하여 캡처 할 수 있습니다 folder.

rename -n 's!([^/]+)\d+/.*!sprintf("%s1/%05d", $1, ++$MAIN::c)!se' ./folder*/*

그것을 실현시키다동적.

필요한 경우 더 많은 논리를 추가할 수 있습니다. 이는 Perl 코드입니다.

답변2

그리고 zsh:

autoload -Uz zmv
n=0
(cd /path/to && zmv -n 'folder<->/*(#qDn.)' 'folder1/${(l[5][0])$((++n))}')

nglob 한정자를 참고하세요 q. 따라서 파일은 숫자로 정렬됩니다. 예를 들어 기본 어휘 순서를 사용하여 얻은 폴더1과 폴더2의 파일 사이가 아닌 폴더10의 파일 이름이 폴더9의 파일 이름으로 변경됩니다.

만족스러우면 삭제 -n(테스트 실행)합니다.

관련 정보