REGEXに基づいてファイルを適切な名前のディレクトリに安全に移動して名前を変更する方法

私はTIの計算機です

大きなドライブには、それぞれ異なる名前のファイルが何百もありますが、いくつかの正規表現があります。それぞれに乱数が追加され、場合によっては文字が追加されます。

たとえば、「テレビ」という単語のバリエーションで名前が付けられた30個のファイルと、「電球」とは異なる50個のファイルがあります。

問題は、名前を生成するスクリプトを実装するときに私が何年も前に持っていた悪いコーディング慣行のために、それは非常に一貫性がないということです。だから私たちは得るかもしれません:

  • Television139443.png
  • elevision244904.png
  • televisio097798.png
  • elevisio984882.png
  • _televisi90890890.png
  • テレビ-911181.png

あなたはその考えを理解します。このパターンは、すべてのファイル「カテゴリ」(「テレビ」、「電球」、「自動車」など)に適用されます。幸い、各ファイル名には、他のカテゴリでは繰り返されない少なくとも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つのまで可能エラー(異なる文字、移調、挿入、削除)。

-nOKの場合(ドライラン)を取り外します。

あなたのアプローチでは、次のようになります。

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]

編集
0

コメントを追加

0

関連記事

分類Dev

ディレクトリ名に基づいてファイルの名前を変更します

分類Dev

ディレクトリ名に基づいてファイルの名前を変更する

分類Dev

親のディレクトリに基づいてファイルを移動および名前変更します

分類Dev

名前に基づいてファイルをディレクトリに移動する

分類Dev

Bashの親ディレクトリに基づいてファイルの名前を変更します

分類Dev

別のファイルと一致する名前に基づいてファイルを異なるディレクトリに移動する

分類Dev

Rを使用してファイル名に基づいてディレクトリ内のファイルの名前を変更する

分類Dev

gulpでファイルをコピーし、親ディレクトリに基づいて名前を変更する方法を探しています

分類Dev

含まれているテキストに基づいて、ディレクトリ内のすべてのファイルの名前を変更します

分類Dev

Rの特定のファイル名を持つ親ディレクトリに基づいてファイルの名前を変更する

分類Dev

Macでの作成時間に基づいてディレクトリ内のファイルのリストの名前を変更する方法

分類Dev

すべてのサブディレクトリから特定のファイルを移動し、サブディレクトリに基づいて名前を変更します

分類Dev

部分的な名前に基づいてディレクトリ内のファイルを削除します

分類Dev

ファイルの名前を変更して、あるディレクトリから別のディレクトリに移動します

分類Dev

名前に基づいてファイルを検索し、同時に名前を変更しながらファイルを移動する

分類Dev

ファイル名を解析し、ファイルの名前を変更してから、別のディレクトリに移動します

分類Dev

別のディレクトリにあるファイルの名前に基づいて、ディレクトリ内のファイルの名前を変更します

分類Dev

Powershell名前に基づいてディレクトリを移動する

分類Dev

リストに基づいてファイルの名前を変更する

分類Dev

findを使用して同じ名前の異なるディレクトリにあるファイルの名前を変更する方法

分類Dev

最初の行に基づいて、ディレクトリ内のすべてのファイルの名前を変更する

分類Dev

元のディレクトリの変更に基づいて、コピーしたディレクトリ内のファイルとサブディレクトリの名前を変更するにはどうすればよいですか?

分類Dev

サブディレクトリ名に基づいて特定のサブディレクトリから単一のディレクトリにファイルをコピーし、名前を変更する

分類Dev

名前のないデフォルトの制約すべての名前を適切に変更する方法

分類Dev

すべてのサブディレクトリ内の唯一のファイルを外部に移動し、名前をディレクトリ名に変更するにはどうすればよいですか?

分類Dev

ディレクトリの名前を変更し、ファイルの名前を部分的に変更する

分類Dev

名前の一部としていくつかの値に基づいてディレクトリとファイルを動的に作成します

分類Dev

ディレクトリとサブディレクトリからtxtファイルに基づいてファイルをコピーして名前を変更する方法

分類Dev

テキストファイルの名前に基づいてファイルを新しいディレクトリに移動するにはどうすればよいですか?

Related 関連記事

  1. 1

    ディレクトリ名に基づいてファイルの名前を変更します

  2. 2

    ディレクトリ名に基づいてファイルの名前を変更する

  3. 3

    親のディレクトリに基づいてファイルを移動および名前変更します

  4. 4

    名前に基づいてファイルをディレクトリに移動する

  5. 5

    Bashの親ディレクトリに基づいてファイルの名前を変更します

  6. 6

    別のファイルと一致する名前に基づいてファイルを異なるディレクトリに移動する

  7. 7

    Rを使用してファイル名に基づいてディレクトリ内のファイルの名前を変更する

  8. 8

    gulpでファイルをコピーし、親ディレクトリに基づいて名前を変更する方法を探しています

  9. 9

    含まれているテキストに基づいて、ディレクトリ内のすべてのファイルの名前を変更します

  10. 10

    Rの特定のファイル名を持つ親ディレクトリに基づいてファイルの名前を変更する

  11. 11

    Macでの作成時間に基づいてディレクトリ内のファイルのリストの名前を変更する方法

  12. 12

    すべてのサブディレクトリから特定のファイルを移動し、サブディレクトリに基づいて名前を変更します

  13. 13

    部分的な名前に基づいてディレクトリ内のファイルを削除します

  14. 14

    ファイルの名前を変更して、あるディレクトリから別のディレクトリに移動します

  15. 15

    名前に基づいてファイルを検索し、同時に名前を変更しながらファイルを移動する

  16. 16

    ファイル名を解析し、ファイルの名前を変更してから、別のディレクトリに移動します

  17. 17

    別のディレクトリにあるファイルの名前に基づいて、ディレクトリ内のファイルの名前を変更します

  18. 18

    Powershell名前に基づいてディレクトリを移動する

  19. 19

    リストに基づいてファイルの名前を変更する

  20. 20

    findを使用して同じ名前の異なるディレクトリにあるファイルの名前を変更する方法

  21. 21

    最初の行に基づいて、ディレクトリ内のすべてのファイルの名前を変更する

  22. 22

    元のディレクトリの変更に基づいて、コピーしたディレクトリ内のファイルとサブディレクトリの名前を変更するにはどうすればよいですか?

  23. 23

    サブディレクトリ名に基づいて特定のサブディレクトリから単一のディレクトリにファイルをコピーし、名前を変更する

  24. 24

    名前のないデフォルトの制約すべての名前を適切に変更する方法

  25. 25

    すべてのサブディレクトリ内の唯一のファイルを外部に移動し、名前をディレクトリ名に変更するにはどうすればよいですか?

  26. 26

    ディレクトリの名前を変更し、ファイルの名前を部分的に変更する

  27. 27

    名前の一部としていくつかの値に基づいてディレクトリとファイルを動的に作成します

  28. 28

    ディレクトリとサブディレクトリからtxtファイルに基づいてファイルをコピーして名前を変更する方法

  29. 29

    テキストファイルの名前に基づいてファイルを新しいディレクトリに移動するにはどうすればよいですか?

ホットタグ

アーカイブ