我试图在3列中显示文件名,大小和类型。数据没有正确显示,我只是不明白为什么。
这是我的代码:
fileName=$(ls -a ~/dirname)
fileSize=$(find ~/dirname/* -printf '%s\n';)
fileType=$(find ~/dirname/* | xargs file | awk '{print $3}')
printf " ----------------------------------------------------------\n"
printf "%15s %15s %15s\n" "Name" "Size" "Type"
printf " ----------------------------------------------------------\n"
printf "%15s %15s %15s\n" "$fileName" "$fileSize" "$fileType"
输出显示如下: (仅作为图像输出以避免堆栈溢出格式化)
答案 0 :(得分:0)
您的变量每个都包含所有文件的信息,但您一次打印它们,而不是将它们分开。此外,find
返回的文件顺序与ls
的顺序不同(按字典顺序对它们进行排序)。
您需要遍历文件并在不同的行上打印每个文件:
printf "%15s %15s %15s\n" "Name" "Size" "Type"
printf " ----------------------------------------------------------\n"
ls -a ~/dirname | while read -r fileName
do
fileSize=$(stat --format=%s "$fileName")
fileType=$(file "$fileName" | awk '{print $3}')
printf "%15s %15s %15s\n" "$fileName" "$fileSize" "$fileType"
done
答案 1 :(得分:0)
我在巴马尔的一些帮助下解决了这个问题,确定我做错了什么:
for fileName in $(ls -a ~/dirname/*);
do
fileSize=$(stat --printf="%s" "$fileName")
fileType=$(file "$fileName" | awk '{print $3}')
printf "%15s %15s %15s\n" $(basename "$fileName") "$fileSize" "$fileType"
done