1. 程式人生 > >Linux下Shell指令碼實現批量重新命名資料夾,批量重新命名檔案(讓原本繁重的工作變得簡單)

Linux下Shell指令碼實現批量重新命名資料夾,批量重新命名檔案(讓原本繁重的工作變得簡單)

最近接了個專案,具體做什麼都不說了,其中有個工作就是批量更改資料夾,然後批量更改資料夾下的檔名字,一會兒先貼程式碼,再詳細解釋步驟。

下面是我的簡化版的目錄結構,實際上有上百個。

project
    dir1
        dir1.py
    dir2
        dir2.py

本人在目錄project下

第一步:

先將所有的py檔案重新命名為test.py,因為py檔案在不同的目錄下,所以都為一個名字方便管理,同時也不會衝突,程式碼入下:

for var in *;
do mv "$var/$var.py" "$var/test.py";
done

注意,這裡我的目錄結構是:資料夾的名字和py檔案的名字相同,如果各位的不一樣,可以改成這樣的寫法:

for var in *;
do mv "$var/*.py" "$var/test.py";
done

如果也不是這種的,請大家視自己的情況稍作修改。

第二步:

第二步,將所有的資料夾重新命名為c+編號+名字,即將 dir1改為c1_dir1, dir2改為c2_dir2。以此類推,程式碼如下:

unset j;
set j=0;
for i in *;
do let j+=1;
echo "$j";
mv "$i" ./c"$j"_"$i";
done;

即可完成我所說的上訴任務。

程式碼詳細講解:

首先感謝各位解決了問題之後會過來看一下講解!

第一步的程式碼:

for var in *;

使用遍歷的for迴圈,得到目錄下所有的檔案,此時的var裡面存的是目錄,如:dir1,dir2。

do 代表了 for 迴圈的開始,done代表for迴圈的結束,中間的mv相信大家都知道,是linux中的移動命令,在這裡作為重新命名使用。

do mv "$var/$var.py" "$var/test.py";

在mv 後面的字串中,"$var"代表了我們的for迴圈中的變數var,$符號是引用我們定義的變數,所以上面的程式碼類似於我們執行了:

mv dir1/dir1.py dir1/test.py

而for迴圈遍歷了所有的資料夾,所以對所有的資料夾都操作了一次。

第二步的程式碼:

unset j;
set j = 0;

unset是linux設定變數的語句,set是設定區域性變數,這裡的區域性變數指的是當前的終端的區域性,如果想設定一個所有的終端都能訪問的變數,則需要使用其他的命令,有的是env,在這裡瞭解set以及unset即可。

set前進行unset,是因為如果不unset,就算執行了set j = 0;如果 j 是事先已經存在的,也不可能重新賦值為0。

然後 for 迴圈就不需要講了

do let j+=1;

將 j 變數自加 1 ,如果不用let,結果將會是這樣的:

1
11
111
1111
....................

然後下面的 mv 語句也不需要講解了。

結束語:

謝謝大家看了這篇文章,如果有不足之處請大家指出,也感謝學長告訴我的一句話:

程式設計師就應該用程式設計師的方法做事情!