显示名称包含空格的文件大小

时间:2018-11-08 21:56:36

标签: linux bash file

我试图通过显示文件大小的目录运行,但是当我尝试打印具有空格的文件大小时stat命令失败。我该如何解决?

#!/bin/bash

    for file in /home/user/Desktop/*; do
        fileSize=$(stat -c%s $file)
        echo $fileSize
    done

2 个答案:

答案 0 :(得分:0)

您应该在变量周围添加引号,以确保其中是否有空格可以正确识别它们:

#!/bin/bash

for file in /home/user/Desktop/*; do
    fileSize=$(stat -c%s "$file")
    echo $fileSize
done

bash的作用是将$ var替换为$ var中的内容。如果其中包含空格,那么它将变成您想要的其他东西,因为bash中使用空格来分隔命令选项。

考虑以下示例:

file="-l -h -a -F"
ls $file

该解析为:

ls -l -h -a -F

输出将不仅是文件“ -l -h -a -F”,而是将被解析为ls的选项,并且将显示当前目录列表。如果像这样在$ file周围加上引号:

file="-l -h -a -F"
ls "$file"

它将被解析为:

ls "-l -h -a -F"

ls将搜索文件“ -l -h -a -F”,并仅显示一个文件(假设该文件存在,否则将出错)。

答案 1 :(得分:0)

使用引号。

#!/bin/bash
for file in /home/user/Desktop/*; do
    fileSize=$(stat -c%s "$file")
    echo $fileSize
done

针对我的桌面进行了调整-

$: for file in *
   do case "$f" in
      *\ *) printf "'$f': %d\n" $(stat -c%s "$file")
      esac
   done
'BPS Stuff': 0
'New TWC Account -  Hodges  Paul A.msg': 37888
'Nov FTOTD calendar.JPG': 138769
'OCA Web Client - ASAP.lnk': 2406
'Paul - Copy.png': 64915
'Solstice Client.lnk': 2165
'VIP Access.lnk': 2079
相关问题