그래서 문서를 시간순으로 잔뜩 다운받았는데, 복사해서 편집해야 해서 수정 날짜가 바뀌더라구요. 다운로드한 순서대로 앞에 숫자(001_, 002_...)를 추가하고 싶습니다.
답변1
그리고 zsh
:
autoload zmv
n=0; zmv -n '*(#qOm)' '${(l[3][0])$((++n))}_$f'
(만족스러우면 제거하세요 -n
(드라이런의 경우)).
그건:
zmv
: zsh 확장 glob 및 교체 연산자를 사용하여 파일 이름을 바꾸는 자동 로드 기능*
: 현재 디렉토리에 숨겨져 있지 않은 모든 파일(#q...)
: 전역 한정자의 장황한 형식을 도입합니다.Om
: 나이순으로 정렬하였습니다. 그래서 최신 마지막.${(l[3][0])$((++n))}
$((++n))
: 너비 3의 왼쪽에 0 패딩을 적용하여 확장합니다._$f
추가_
및 원본 파일 이름
답변2
해결책을 찾았습니다여기.
ls -1tr |rename -v 's/.*/our $i;if(!$i){$i=1;} sprintf("%04d.pdf", $i++)/e'
답변3
find . -type f -printf '%C@ %p\0' |
sort -z -n |
awk 'BEGIN{RS=ORS="\0"};{print $2}' |
rename -0 -n 'our $i;
s:(^.*/)([^/]*):sprintf("%s%04d_%s",$1,++$i,$2):e'
이는 GNU를 사용하여 UNIX 에포크( ) 이후의 초 단위 숫자 형식의 수정 타임스탬프와 공백 문자가 앞에 붙은 NUL로 구분된 파일 이름( 즉, 전체 경로) find
을 인쇄합니다 .%p
%C@
원하는 경우 find
여기에 있는 다른 옵션을 사용하여 파일 검색을 세분화할 수 있습니다(예: -name "*.pdf"
, -maxdepth 2
등).
find
sort
그런 다음 옵션을 사용하여 NUL로 구분된 입력을 숫자(타임스탬프 기준)로 정렬하고 출력을 GNU로 파이프한 -z -n
다음 awk로 타임스탬프와 공백을 제거하고 마지막으로 이를 perl 이름 바꾸기 스크립트로 파이프합니다.
Perl 이름 바꾸기 스크립트는 이 -0
옵션을 사용하여 STDIN에서 NUL로 구분된 레코드를 읽은 후 다음을 수행합니다.
sprintf()
'%s%04d_%s'(%04d_
0 패딩, 너비 4자리 및 밑줄) 와 함께 사용되며$i
이름의 파일 이름 부분을 대체하기 위한 카운터로 사용됩니다.$1
는 전체 파일 이름의 경로 부분이고,$++i
자동 증가 카운터 변수이며,$2
기본 파일 이름입니다.$i
전역 변수 로 선언하면our
루프가 반복될 때마다 값이 유지됩니다(그렇지 않으면 매번 0으로 재설정됩니다).
이 -n
옵션은 테스트 실행 작업으로 전환하여회의이름이 변경되었습니다. 원하는 대로 작동한다고 확신하면 제거하여 -n
출력이 없는 파일의 이름을 자동으로 바꾸거나 -v
자세한 출력으로 바꾸십시오.
ls -1tr
이것을 사용하는 것과는 달리아니요파일 이름에 개행 문자가 포함되어 있으면 중단됩니다. 그것은 함께 작동합니다어느유효한 파일 이름입니다.
참고로, 각 파일 이름 뒤에 올바른 형식의 날짜를 추가하려면 내 rename
스크립트를 참조하세요.파일 이름 끝에 수정된 날짜 타임스탬프를 사용하여 여러 파일의 이름을 바꾸시겠습니까?. 파일 이름에 날짜 및 시간 접두어를 추가하도록 쉽게 수정됩니다. 타임스탬프를 얻기 위해 각 파일에서 실행 stat
되므로 파일 이름을 미리 정렬할 필요가 없습니다.
예를 들어
rename -n 'BEGIN {use Date::Format};
die $! unless -f $_;
next if (m/^\d{8}-$/);
my $ts=(stat($_))[9];
my $dt=time2str("%Y%m%d-%H%M%S",$ts);
$_ = "$dt-$_"' *.pdf