本文為個人原創(chuàng),歡迎轉載,但請務必在明顯位置注明出處!
本文所有源碼發(fā)布于:https://github.com/qiuyi943/FileExt
http://m.itdecent.cn/writer#/notebooks/5989464/notes/5526124
1、概述
其實在為這篇博文起標題的時候有點糾結,不知當前的標題能否明確概括本文介紹的這個工具的功能。也許結合以下場景的描述能夠幫助大家了解這個工具到底是干什么用的。
假設有一個文件夾“1”,其樹型結構如下所示
1
├── 2
│ └── 3
│ ├── 4
│ │ └── D.txt
│ ├── A.txt
│ ├── B.txt
│ └── C.txt
├── 5
│ ├── 6
│ │ ├── 7
│ │ │ └── F.txt
│ │ └── G.txt
│ └── E.txt
├── 8
│ └── H.txt
└── I.txt
此時, 有一個file.list文件里面記錄了想要拷貝的文件(可以是相對路徑或者絕對路徑)
./2/3/A.txt
./8/H.txt
./I.txt
./5/6/G.txt
然后使用本文介紹的工具能夠基于源文件夾“1”的樹形結構,并按照file.list的內(nèi)容,創(chuàng)建一個新的樹型文件夾“1_[datatime]”,其結構如下所示
1_20160830014128/
├── 2
│ └── 3
│ └── A.txt
├── 5
│ └── 6
│ └── G.txt
├── 8
│ └── H.txt
└── I.txt
2、使用場景
該工具用于將你感興趣的文件從一個復雜的樹型結構路徑中摘取出來,并通過創(chuàng)建另外一個完備的樹型結構路徑來保存這些文件。例如,Android 的一個模塊中可能會編譯出多個JNI庫文件、bin文件以及app文件(可能不常見,但博主現(xiàn)在維護的模塊卻是如此);如果每次對該模塊進行整編,就會在多個路徑中生成多個文件,當對外分發(fā)時需要創(chuàng)建一個跟源路徑相同的文件樹型結構,然后再將各個文件從源路徑中拷貝出來,費時費力,還容易出錯。
3、系統(tǒng)兼容
該工具基于Python3開發(fā),在win10以及ubuntu 16.04 LTS測試均可使用,前提當然是系統(tǒng)要已經(jīng)安裝Pyhton3;由于使用了tkinter這個庫,所以在ubuntu下使用時,需要安裝python3-tk
sudo apt-get install python3-tk
4、功能擴展
如果file.list中的路徑表示的是一個文件夾,那么這個文件夾中的所有內(nèi)容都會被拷貝。例如,file.list的內(nèi)容如下
/media/sf_share/FileExt/1/2/3
此時被創(chuàng)建出來的文件樹型結構則是
1_20160830020434
└── 2
└── 3
├── 4
│ └── D.txt
├── A.txt
├── B.txt
└── C.txt
如果想要拷貝出當前路徑中的所有名為“D.txt”的文件,那么file.list可以這么寫
**/D.txt
此時被創(chuàng)建出來的文件樹型結構如下
1_20160830020711
└── 2
└── 3
└── 4
└── D.txt
5、工具使用
工具的使用非常簡單,進入命令行終端輸入以下命令,便會彈出對話框分別選擇源文件夾和file.list(任意文件名)
python3 FileExt.py
選擇文件夾

選擇file.list文件

選擇完文件夾file.list文件之后,如果文件存在便會在console窗中輸出類似以下內(nèi)容
./2/3/A.txt --> /media/sf_share/FileExt/1_20160831003900/./2/3/A.txt
./8/H.txt --> /media/sf_share/FileExt/1_20160831003900/./8/H.txt
./I.txt --> /media/sf_share/FileExt/1_20160831003900/./I.txt
./5/6/G.txt --> /media/sf_share/FileExt/1_20160831003900/./5/6/G.txt
6、源碼下載
本工具的所有源碼已經(jīng)部署至github ,如果已經(jīng)安裝git,可以通過以下命令直接下載:
git clone https://github.com/qiuyi943/FileExt.git