求救!徵linux高手幫忙解答這問題,感激不盡

man 中文手冊 - ls
http://fanqiang.chinaunix.net/a1/b5/20010415/193713_b.html

參數:
-l 一行只輸出一個文件。
-R 列出所有子目錄下的文件。

ls -lR 目錄名稱,結果:



********************************************

試了一下:




運行結果:



還行

不過有一點小瑕疵,子目錄會多出現一行,這個還要修改。


20行的限制:

可能有什麼密技絕招,可以用很少的行數弄出來吧。

若不是,那就太無聊了。

解決方法:
註解、空行清掉
指令行濃縮一下, ; 分號 ; 分號 一直分下去....覺的沒意義

fedora wrote:
man 中文手冊 -...(恕刪)


最佳解答,太感謝了(泣)....

fedora wrote:
man 中文手冊 ...(恕刪)


有人提供了文字處理的方式
那我來個副程式處理的方式吧

===> 請往左看 wrote:
這程序很接近但一樣有錯要改...哈 ~ 希望有幫到您..


,基本觀念是一樣的

To Fedora:

其實可以改用ls -R,pipe丟出來的格式會變成這樣

$ ls -R dir
dir:
fileA
fileB
fileC
dirA
dirB

dir/dirA:
fileAA
fileAB

dir/dirB:
fileBA
fileBB
dirBA

dir/dirB/dirBA:
fileBAA
fileBAB
....

這樣要整理簡單多了。

只要正則抓出:$,這一行就是目錄
抓到^$,就是結束 (但可以不用管,哈!)
其他中間就是該目錄下的檔案/目錄名。

然後就是組合的問題。
Bash script的組合式一行解(多行合併成一行),網友「===> 請往左看」已經寫出來(需修改),您可以參考看看。

ryan_chang wrote:
有人提供了文字處理的方式
那我來個副程式處理的方式吧


,直接遞迴
綠意盎藍 wrote:
1.至 Intel...(恕刪)

01這裡不只可以免費問電腦疑難雜症
連作業都可以拿出來問
大家真閒~~

這樣是害他 不是幫他
難怪現在的年輕人只值22K
果然
明月下的清風 wrote:
To Fedora:
其實可以改用ls -R,pipe丟出來的格式會變成這樣...(恕刪)


原來如此

可是我的 ls -R 出來是這樣



不知道是不是系統的關係?
我是用 CentOS 5.X 的

擠一堆的

印象中 while read 迴圈的,一次會讀入一整行,這樣就還要去拆解字串,較麻煩

for in 雖能讀 空格 或 自訂IFS符號 分隔的字串。然而如果直接讀空格分隔的字串,檔名之間若有空格的,會有 bug 出現,一個含空格的檔名,會被拆成兩個或多個看待。Linux 下是允許檔名中間有空格的。


但是看前面網友「===> 請往左看」提供的程式碼:
ls -R1 $1 | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done

實測,用管道的跑,while read 卻可以讀入空白分隔的字串

這個就不明白什麼原理了

只是字串還需要修改,不使用暫存檔的情況,只用管道會使整個設計很複雜。


***********************************

順道請教一下:

ls -R1 是指定:最多查詢一層子目錄的意思嗎?

比方說:-R2 是二層,-R3 三層,這樣子,可以指定上限值的

仔細看那個是數字1,並不是小寫L

可我看 man 中並無這樣的解說,且指令參數一般都是只有一個字母的,如果兩個連在一起,一次下多個參數,感覺好像會有混淆的問題。

比方說:-lFR1a 下一堆參數,中間多個數字1,這樣軟體不是很容易誤判。
有沒有害到他很難講。
如果直接copy然後past沒驗證直接交出,至少用我的code會死很慘 XDD
但如果能抓出問題除錯甚至改良後交出,那就很歡迎了。

fedora wrote:

不知道是不是系統的關係?
我是用 CentOS 5.X 的

擠一堆的


跟系統無關,這樣列出其實正確。
所以重點變成要對檔案名一一抓出來,要怎麼跟前面行出現的目錄配在一起。
「===> 請往左看」shell script跟我的perl code都是同樣在做這件事情。



印象中 while read 迴圈的,一次會讀入一整行,這樣就還要去拆解字串,較麻煩

for in 雖能讀 空格 或 自訂IFS符號 分隔的字串。然而如果直接讀空格分隔的字串,檔名之間若有空格的,會有 bug 出現,一個含空格的檔名,會被拆成兩個或多個看待。Linux 下是允許檔名中間有空格的。




但是看前面網友「===> 請往左看」提供的程式碼:
ls -R1 $1 | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done

實測,用管道的跑,while read 卻可以讀入空白分隔的字串

這個就不明白什麼原理了

只是字串還需要修改,不使用暫存檔的情況,只用管道會使整個設計很複雜。


***********************************

順道請教一下:

ls -R1 是指定:最多查詢一層子目錄的意思嗎?

比方說:-R2 是二層,-R3 三層,這樣子,可以指定上限值的

仔細看那個是數字1,並不是小寫L

可我看 man 中並無這樣的解說,且指令參數一般都是只有一個字母的,如果兩個連在一起,一次下多個參數,感覺好像會有混淆的問題。

比方說:-lFR1a 下一堆參數,中間多個數字1,這樣軟體不是很容易誤判。



請直接跑一下ls -R1試試看,相信您會看到上面一堆疑惑的解答。
另請注意沒有-R2或R3參數

PS:我的perl script code的確會遇到空白字串檔案名判斷問題,但也可以修正。
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!