2013-07-22 157 views
1

什麼是使用for循環打印目錄中列出的所有文件和文件數目的最佳方法?有沒有更好的做這個?Bash - 打印目錄文件

#!/bin/bash 

target="/home/personal/scripts/07_22_13/ford/$1" 

for file in "$target"/* 
do 
    printf "%s\n" "$file" | cut -d"/" -f8 
done 
+1

注意,腳本不知道'$ HOME'變種,所以你必須使用'/家...'。 – fedorqui

+0

有沒有辦法可能不必包括整個路徑?這肯定會讓用戶更容易。 @fedorqui – theGrayFox

+0

嗯,也許你可以定義一個像'path =/home/this_user'這樣的初始路徑結構,然後檢查'$ path/$ directory'。 – fedorqui

回答

4

這裏是一個解決方案:

#!/bin/bash 

target="/home/personal/scripts/07_22_13/ford/$1" 
let count=0 
for f in "$target"/* 
do 
    echo $(basename $f) 
    let count=count+1 
done 
echo "" 
echo "Count: $count" 

解決方案2

如果你不想處理解析路徑得到的只是文件名,另一種解決方案是cd成目錄有問題,做你的生意,並cd回到你所在的位置:

#!/bin/bash 

target="/home/personal/scripts/07_22_13/ford/$1" 
pushd "$target" > /dev/null 
let count=0 
for f in * 
do 
    echo $f 
    let count=count+1 
done 
popd 
echo "" 
echo "Count: $count" 

pushdpopd命令將切換到一個目錄,然後返回。

+0

你會用什麼格式化文件的輸出來查看文件名?我最終使用剪切,但你會建議? – theGrayFox

+0

查看我的更新:使用'basename' –

+0

我想出了這個:awk -F'/''{print $ 8 | 「sort」}'我會在一秒鐘之內查看basename。 – theGrayFox

0
target="/home/personal/scripts/07_22_13/ford/$1" 
for f in "$target"/*; do 
    basename "$f" 
done | awk 'END { printf("File count: %d", NR); } NF=NF' 

basename "$f"將自動輸出在單獨的行每個文件名,並且AWK代碼將打印的處理的記錄的總數,這是這種情況下是列出的文件的數目。此外,awk會自動打印文件名,因爲最後的模式爲NF=NF。如所示,我會說學習awk會很有好處。 :-)

0

您是否經常需要打印並將目錄(又名文件夾)的內容導出爲PDF或HTML文件?藉助Print Maestro,您可以瀏覽硬盤的目錄結構,並將文件列表打印或導出爲各種格式。通過「查看和點擊」風格設計的直觀圖形界面,一切都可以快速輕鬆完成。

Print Maestro作爲一款新穎優雅的打印目錄解決方案,爲您提供了讓您的目錄打印任務更輕鬆,更愉快的機會。打印您的文件夾結構或文件夾的實際內容;將它們轉換爲PDF文件或創建一個乾淨的HTML頁面在網站上發佈;只需點擊一下即可完成。

Print File List