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
我需要將所有文件從Round1Div2移動到Round_1_Div2和Round2Div2到Round_2_Div2
根據我的小知識,我做了
find *ound[0-9]Di* > rename.txt sed -e 's/ound/ound_/;s/Di/_Di/' < rename.txt > newname.txt
執行上述命令後創建rename.txt和nename.txt
重命名.txt
Round1Div2 Round2Div2
新名字.txt
Round_1_Div2 Round_2_Div2
如何將所有文件從 rename.txt 的每個 like to 中指定的目錄移動到newname.txt**中的相應目錄?謝謝你。
使用 perl
rename
實用程序(也稱為prename
andfile-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