我试图通过显示文件大小的目录运行,但是当我尝试打印具有空格的文件大小时stat命令失败。我该如何解决?
#!/bin/bash
for file in /home/user/Desktop/*; do
fileSize=$(stat -c%s $file)
echo $fileSize
done
答案 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