テキストファイルにリストされているディレクトリからファイルを移動するBashスクリプト

テキストファイルにリストされているディレクトリからファイルを移動するBashスクリプト

私はこのようなディレクトリ構造を持っています。

.
├── Round_1_Div2
│   ├── file1.txt
│   └── file2.txt
├── Round1Div2
│   ├── file3.txt
│   └── file4.txt
├── Round_2_Div2
│   ├── file1.txt
│   └── file2.txt
└── Round2Div2
    ├── file3.txt
    └── file4.txt

次のすべてのファイルを変換する必要があります。1ラウンド2ラウンド到着Round_1_Div2そして2ラウンドディビジョン2到着Round_2_Div2

私の短い知識によると

  find *ound[0-9]Di* > rename.txt
  sed  -e 's/ound/ound_/;s/Di/_Di/' < rename.txt > newname.txt

名前の変更.txtそして名前.txt上記のコマンドを実行した後に生成されました

名前の変更.txt

Round1Div2
Round2Div2

新しい名前.txt

Round_1_Div2
Round_2_Div2

それぞれに指定されたディレクトリ内のすべてのファイルを移動する方法名前の変更.txtそのディレクトリに移動新しい名前.txtありがとうございます。

ベストアンサー1

Perlユーティリティ(renameおよびとも呼ばれる)を使用する:prenamefile-rename

$ rename -n 's/Round(\d)Div(\d)/Round_$1_Div$2/' */*
rename(Round1Div2/file3.txt, Round_1_Div2/file3.txt)
rename(Round1Div2/file4.txt, Round_1_Div2/file4.txt)
rename(Round2Div2/file3.txt, Round_2_Div2/file3.txt)
rename(Round2Div2/file4.txt, Round_2_Div2/file4.txt)

この-nオプションを使用するとテストが実行されるため、内容のみが表示されます。会議実際にするよりもすること。必要な操作が実行されることを確認したら、削除-n(進行状況表示やその他の出力なしでファイル名を変更)するか、-v詳細な出力に変更してください。

$ rename -v 's/Round(\d)Div(\d)/Round_$1_Div$2/' */*
Round1Div2/file3.txt renamed as Round_1_Div2/file3.txt
Round1Div2/file4.txt renamed as Round_1_Div2/file4.txt
Round2Div2/file3.txt renamed as Round_2_Div2/file3.txt
Round2Div2/file4.txt renamed as Round_2_Div2/file4.txt

おすすめ記事