大きなドライブには、それぞれ異なる名前のファイルが何百もありますが、いくつかの正規表現があります。それぞれに乱数が追加され、場合によっては文字が追加されます。
たとえば、「テレビ」という単語のバリエーションで名前が付けられた30個のファイルと、「電球」とは異なる50個のファイルがあります。
問題は、名前を生成するスクリプトを実装するときに私が何年も前に持っていた悪いコーディング慣行のために、それは非常に一貫性がないということです。だから私たちは得るかもしれません:
あなたはその考えを理解します。このパターンは、すべてのファイル「カテゴリ」(「テレビ」、「電球」、「自動車」など)に適用されます。幸い、各ファイル名には、他のカテゴリでは繰り返されない少なくとも5つの一貫した文字があります(12匹の猫)。 )。
私が達成したいのは、混合フォルダーを再帰的に調べ、各ファイルの名前を適切な完全なタイトル+作成日を追加して、それぞれのフォルダーにも移動することです。
のようなもの:
case : regex("levis"):
rename to Television-($creation_date).($extension)
mv to ~/Categories/Television/
break;
case : regex("ghtbu"):
rename to Lightbulb-($creation_date).($extension)
mv to ~/Categories/Lightbulbs/
break;
明らかに、これは適切なコードではありません。アイデアを説明するだけです。私は毎日のbash / zshタスクにはまともな快適さを持っていますが、十分に流暢ではありません!
また、正規表現が一致しない場合も適切に処理する必要があります。
をzsh
使用すると、近似一致機能に基づいて別のアプローチを使用できます。
autoload zmv # best in ~/.zshrc
zmodload zsh/stat
dest=~/Categories
categories=(television lightbulb motorcar etc)
mkdir -p -- $dest/${(C)^categories}
zmv -n '(**/)(*[^0-9])<->(.*)' \
'$dest/${c::=${${(CM)categories:#(#a3)$2}:-unknown}}/$c-$(
zstat -F %FT%T%z +mtime -- $f)$3'
${(M)categories:#(#a3)$2}
探し$2
中(番号の前の部分)categories
の配列は、3つのまで可能エラー(異なる文字、移調、挿入、削除)。
-n
OKの場合は(ドライラン)を取り外します。
あなたのアプローチでは、次のようになります。
autoload zmv # best in ~/.zshrc
zmodload zsh/stat
dest=~/Categories
typeset -A categories
categories=(
levis Television
ghtbu Lightbulb
otorc Motocar
)
mkdir -p -- $dest/$^categories
for k (${(k)categories}) (
zmv -n "(**/)*$k*(.*)" '$dest/$categories[$k]/$categories[$k]-$(
zstat -F %FT%T%z +mtime -- $f)$2'
)
または、一般的な文字が常に3番目から7番目の場合:
autoload zmv # best in ~/.zshrc
zmodload zsh/stat
dest=~/Categories
categories=(Television Lightbulb Motocar)
mkdir -p -- $dest/$^categories
for c ($categories) (
zmv -n "(**/)*$c[3,7]*(.*)" '$dest/$c/$c-$(
zstat -F %FT%T%z +mtime -- $f)$2'
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加