Bash

用於在文本文件中列出的目錄中移動文件的 Bash 腳本

  • May 2, 2021

我有這樣的目錄結構。

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

我需要將所有文件從Round1Div2移動到Round_1_Div2Round2Div2Round_2_Div2

根據我的小知識,我做了

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

執行上述命令後創建rename.txtnename.txt

重命名.txt

Round1Div2
Round2Div2

新名字.txt

Round_1_Div2
Round_2_Div2

如何將所有文件從 rename.txt 的每個 like to 中指定的目錄移動到newname.txt**中的相應目錄?謝謝你。

使用 perlrename實用程序(也稱為prenameand file-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

引用自:https://unix.stackexchange.com/questions/647672