1. 巧用tree命令導出文件目錄遞歸詳情
我清楚的記得在我讀研二的時候有一次我幫老師收「海外名師課堂」的作業,有一名巴基斯坦的學生,想要老師的課件,我當時給他說這個不被允許,隨便給外國留學生拷貝課件原則上是不允許的,我是這樣認為的。但是他說這個是經過了我們老師的同意,聽到這我就給他拷貝了課件,不然好像顯得我們巴鐵關系也不怎麼鐵,一個課件都不拷貝。但是同時他希望我能給他提供課件的目錄概覽信息,他當時說的英文,但是我聽出來了,並想都沒想就回答:「OK,I』ll send you later.」
回到教研室,我就開始琢磨這個事兒,因為課件很大,目錄很深,並且內容也是非常多的。靠人為梳理目錄關系肯定是不行的,我就想起來以前用過的 tree 命令,在網上搜羅了一下,還真的有類似的功能樣例,可以直接輸出指定目錄的遞歸文件概覽詳情。
二話不說,先看命令:
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`# 切換至目標目錄, /d是切換盤符的意思
cd /d W:Google_Download
tree /f > W: ree.txt` </pre>
不過說真的,Windows的cmd命令真是惡心極了,難道就不能向Linux一樣,直接 cd 嗎!還非得加個 /d 參數。
命令執行如下:
執行結果如圖所示:
從上圖來看,我們完整的拿到了目標目錄 W:Google_Download 的文件遞歸詳情。
如果你也有類似的需求,那麼這個 命令對你會非常有幫助!省時省力~
Linux tree命嫌頌令用於以樹狀圖列出目錄的內容。
執行tree指令,它會列出指定目錄下的所有文件,包括子目錄里的文件。
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;"> -a 顯示所有文件和目錄。 -A 使用ASNI繪圖字元顯示樹狀圖而非以ASCII字元組合。 -C 在文件和目錄清單加上色彩,便於區分各種類型。 -d 顯示目錄悉燃名稱而非內容。 -D 列出文件或目錄的更改時芹陸鄭間。 -f 在每個文件或目錄之前,顯示完整的相對路徑名稱。 -F 在執行文件,目錄,Socket,符號連接,管道名稱名稱,各自加上"*","/","=","@","|"號。 -g 列出文件或目錄的所屬群組名稱,沒有對應的名稱時,則顯示群組識別碼。 -i 不以階梯狀列出文件或目錄名稱。 -L level 限制目錄顯示層級。 -l 如遇到性質為符號連接的目錄,直接列出該連接所指向的原始目錄。 -n 不在文件和目錄清單加上色彩。 -N 直接列出文件和目錄名稱,包括控制字元。 -p 列出許可權標示。 -P<範本樣式> 只顯示符合範本樣式的文件或目錄名稱。 -q 用"?"號取代控制字元,列出文件和目錄名稱。 -s 列出文件或目錄大小。 -t 用文件和目錄的更改時間排序。 -u 列出文件或目錄的擁有者名稱,沒有對應的名稱時,則顯示用戶識別碼。 -x 將范圍局限在現行的文件系統中,若指定目錄下的某些子目錄,其存放於另一個文件系統上,則將該子目錄予以排除在尋找范圍外。 </pre>
使用 tree 命令如下,經過我的使用,好像Windows OS不完全支持 tree 命令!
不過在某些情況下, tree 命令還是能夠幫我們解決一些問題的。
2. VB怎樣快速獲取當前文件夾下的所有文件的路徑(包括子目錄)
有兩種方法:
1、使用DIR遞歸,不過這是微軟明確不推薦的
2、最快但不太正規的
使用 Shell "cmd /k dir c:\windows /s/b/a >>d:\jg.txt"
c:\windows 目標文件夾,當前文件夾為 app.path,你可以根據要求生成命令字元串
d:\jg.txt 為臨時文件
執行這行後再讀取臨時文件即可。極快!
3. Linux 編程問題之遞歸取目錄下所有文件名與路徑
樓主,你好!
在BLP上正好見過這個程序,編譯好執行的時候,傳遞的參數為要列印的目錄
代碼如下,純C寫的,希望對你有幫助
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
void printdir(char* dir, int depth)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;
if( (dp = opendir(dir)) == NULL )
{
fprintf(stderr, "cannot open directory: %s\n", dir);
return;
}
chdir(dir);
while( (entry = readdir(dp)) != NULL)
{
lstat(entry->d_name, &statbuf);
if( S_ISDIR(statbuf.st_mode) )
{
if( strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0 )
continue;
printf("%*s%s/\n", depth, "", entry->d_name);
printdir(entry->d_name, depth+4);
}
else
printf("%*s%s\n", depth, "", entry->d_name);
}
chdir("..");
closedir(dp);
}
int main(int argc, char* argv[])
{
char *topdir = ".";
if( argc >= 2 )
topdir=argv[1];
printf("Directory scan of %s\n", topdir);
printdir(topdir, 0);
printf("Done.\n");
exit(0);
}