如何在BASH中创建一个以特定格式列出文件的FOR循环

时间:2017-10-17 16:17:21

标签: linux bash

我想打印所选目录中的所有文件。我想格式化要在列标题下显示的文件。但是,当我尝试运行以下代码时,我在控制台中遇到错误。

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

1 个答案:

答案 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'
}