2017-10-17 55 views
1

我想打印我選擇的目錄中的所有文件。我想格式化要顯示在列標題下的文件。但是當我試圖運行下面的代碼時,我在控制檯中收到錯誤。如何在BASH中創建以特定格式列出文件的FOR循環

list_files() 
{ 
    FILES=/home/student/.junkdir/ 
    echo "Listing files in Junk Directory" 
    format="%8s%10s%10s $-s\n" 
    printf "$format" "Filename" "Size(Bytes)" "Type" 
    printf "$format" "--------" "-----------" "----" 
    for listed_file in $FILES; do 
     file_name=$(du $listed_file | awk '{print $2}') 
     file_size=$(du $listed_file | awk '{print $1}') 
     file_type=$(file $listed_file | cut -d ' ' -f2-) 
     printf "$format" $file_name $file_size $file_type 
    done 
} 

這是輸出

Listing files in Junk Directory 
FilenameSize(Bytes)  Type hBs 
-------------------  ---- hBs 
du: cannot access ‘/home/student/.junkdir/*’: No such file or directory 
du: cannot access ‘/home/student/.junkdir/*’: No such file or directory 
ERROR: cannot  open hBs 
`/home/student/.junkdir/*'  (No  such hBs 
file  ordirectory) hBs 
+3

你發佈時,它編輯腳本?這些錯誤信息讓我認爲你的for循環實際上是'用於通配符的$ FILES/*'中的列表文件。 –

+0

目錄「/home/student/.junkdir/」存在嗎? –

+0

對不起,我原來的代碼有通配符。我想我已經意識到我的問題的一部分。 –

回答

1

使用stat命令來獲取數據,並column使輸出漂亮。

stat -c $'%n\t%s\t%F' * | column -ts $'\t' 

在功能

list_files() { 
    local dir=/home/student/.junkdir/ 
    echo "Listing files in Junk Directory" 
    { 
     printf "%s\t%s\t%s\n" "Filename" "Size(Bytes)" "Type" 
     stat -c $'%n\t%s\t%F' "$dir"/* 
    } | column -t -s $'\t' 
} 
+0

你能否建議如何使用這個方法使用我在我的例子中使用的相同命令?我自己嘗試過但沒有任何快樂。 –

+0

你有什麼喜悅嗎?任何錯誤消息? –

+0

你只需要調用一次杜:'讀-r文件大小的文件名<<(DU「$ listed_file」)' –

相關問題