나는 작은 스크립트를 사용하여 파일 번호를 매깁니다. 나는 맞춤 작업으로 시작했습니다 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))}')
n
glob 한정자를 참고하세요 q
. 따라서 파일은 숫자로 정렬됩니다. 예를 들어 기본 어휘 순서를 사용하여 얻은 폴더1과 폴더2의 파일 사이가 아닌 폴더10의 파일 이름이 폴더9의 파일 이름으로 변경됩니다.
만족스러우면 삭제 -n
(테스트 실행)합니다.