
特定の順序でファイル名を自動的に変更するスクリプトを使用します。
#!/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
このユーティリティを使用してこのプロセスを簡素化する方法はありますか?私はMac 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 コンポーネントを生成します。)
pragmano warnings
は交換を中止し、パス名コンポーネントが欠落していると文句を言います。通常、これは必須ではありませんが、このrename
コマンドを使用すると追加の警告が可能になると思います。
-n
試運転に追加するか、-v
事後確認タスクに追加します。
または、Perlフラグメントを使用して取得したパラメータを取得してファイルセットに適用することもできます。しかし、そうしたら、PerlでYAMLを解析することもできます。