특정 순서에 따라 파일 이름을 자동으로 바꾸는 스크립트를 사용합니다.
#!/usr/bin/env zsh
pages=($(sed -n '/page_order/,/^$/ p' _config.yml | tail -n +2 | sed 's/ - //'))
npages=${#pages}
for ((i=1; i<=$npages; i++)); do
page=${pages[$i]}
old=${(f)$(gfind . -iregex ".*/.*${page}.md")[1]}
pagenumber=$(printf '%0*d\n' ${#npages} $i)
new="${pagenumber}-${page}.md"
mv -i $old $new
done
_config.yml
항목은 어디에 있나요?
page_order:
- foo
- bar
- baz
파일 foo.md bar.md baz.md
이름은 자동으로 1-foo.md 2-bar.m 3-baz.md
.
rename
이 유틸리티를 사용하여 이 프로세스를 단순화할 수 있는 방법이 있습니까 ? 저는 맥 OS X 10.10을 사용하고 있습니다.
(순수한 zsh 솔루션에 대해서는 다음을 참조하세요.여기서 `find`를 사용하는 대신 Zsh에 내장된 와일드카드 일치를 사용할 수 있나요?)
답변1
당신이 목록을 얻을 수 있다면문서rename
이는 Perl의 매개변수 세트로 쉽게 수행할 수 있습니다.
rename 'no warnings; $a++; s!^(.*/)?(.*)!$1$a-$2!' "$@"
변수 $a
및 $b
는 Perl에서 미리 선언된 전역 변수이므로 전체 표현식이 루프 내에서 고려되어야 하고 그에 따라 범위가 지정되어야 하지만 실행 기간 동안 해당 값을 유지합니다. 대체 자체는 현재 값을 $a
파일 이름의 일부로 삽입하므로 인수도 경로 이름이 될 수 있습니다. (매개변수를 dirname
sums 로 분할하여 basename
$1 및 $2 구성요소가 생성됩니다.)
pragma no warnings
는 교체를 중지하고 경로 이름 구성 요소가 누락되었다고 불평합니다. 일반적으로 이는 필수는 아니지만 이 rename
명령을 사용하면 추가 경고가 가능하다고 생각합니다.
-n
시운전에 추가하거나 -v
사후 확인 작업에 추가합니다.
또는 Perl 조각을 사용하여 얻은 매개변수를 가져와서 파일 세트에 적용할 수 있습니다. 하지만 일단 그렇게 하고 나면 Perl에서 YAML을 구문 분석할 수도 있습니다.