Linux Bash脚本,输出文件夹内容和字节大小,而不使用ls

Linux Bash脚本,输出文件夹内容和字节大小,而不使用ls,linux,bash,variables,output,Linux,Bash,Variables,Output,我正在编写bash脚本。 此脚本应显示文件夹的内容及其字节大小。 通常我会使用ls命令,但在这个练习中我不能使用它。 显示器上的输出必须采用“文件名:大小”格式 所以我试了几个小时,我得到的只是: #!/bin/bash IFS=" "; string="$(du -bc /var/*)"; textArray=($string); for ((i=0; i<${#textArray[@]}; ++i)); do echo "${textArray[

我正在编写bash脚本。 此脚本应显示文件夹的内容及其字节大小。 通常我会使用ls命令,但在这个练习中我不能使用它。 显示器上的输出必须采用“文件名:大小”格式 所以我试了几个小时,我得到的只是:

#!/bin/bash

IFS=" ";

string="$(du -bc /var/*)";

textArray=($string);

for ((i=0; i<${#textArray[@]}; ++i));
    do
            echo "${textArray[$i]}";
    done
exit 0;
#/bin/bash
如果=”;
string=“$(du-bc/var/*)”;
textArray=($string);
对于((i=0;i可能类似于:

stat --format="%n:%s" *

我不知道为什么我的第一个脚本会这么奇怪。如果有人需要它,这里有另一个解决方案:

#!/bin/bash

for file in *
do
echo -n $file:" "
du -b $file | cut -f1
done

这就是解决方案!谢谢你,我试着发布完整的代码。+1:这对于使用GNU stat的系统来说是一个很好的解决方案。不幸的是,GNU stat不是POSIX标准工具,并且不能保证在bash运行的任何地方都可用。很高兴我能提供帮助。我会注意到,你不应该删除原始问题的内容,因为这会混淆任何人没有其他人会在将来看到这篇文章。最好的办法是简单地接受正确的答案,就像你已经做过的那样。好吧,我很抱歉。但是这样会比较容易混淆。有没有其他可能的解决方案,不使用netstat将其循环?仅供参考,这是直接的。这是一个没有更多引号的错误。
du-b“$file”
,或者名称中包含空格的文件将不起作用。此外,
echo-n
不是POSIX标准化标志;如果您希望对格式进行更多控制,最好使用
printf
。此外,文件名的冒号分隔或换行分隔列表从一开始就是一个坏主意,因为冒号和换行符都是在文件名中合法。如果您生成的信息是供机器使用的,而不是供人类阅读的,最好使用NUL分隔符。好的,谢谢您提供这些信息。那么完整的“printf”代码应该是什么样子的呢?我不熟悉这一点,我想学习正确的方法。看看,
du-b
不是POSIX选项,因此我们需要使用不同的工具。
wc
可能是更好的选项;现代实现将使用
stat()
如果给定的输入指向文件而不是管道,那么它不会失去效率……因此,这可能是这样的:
对于*中的文件;
执行echo“${file}:$(wc-c“$file”);完成
,如果您想使用echo(不
-E
-n
需要这种方式)。