在 n 个文件后获取大量文件的文件大小失败

在 n 个文件后获取大量文件的文件大小失败

我试图找出如何处理处理大文件列表的问题。

我有 2000 多个文件的列表。当我尝试使用 ls 或 wc 将它们放入循环中以获取每个文件的文件大小时,在 n 个文件之后, ls/wc 失败。看来如果我每 3-4 个文件暂停 2 秒,ls/wc 就可以工作。

为了使问题更加复杂,我还使用 rsh 在远程服务器上运行它,以便我可以比较 server1 和 server2 上的文件大小。但是,当我不使用 rsh 时,我在本地也确实遇到了问题,但它在开始失败之前会遍历更多文件列表。

server="xy1"
for CompareList in `cat compare_jnj.txt`
do
     rsh $server wc -c /u2/web/$CompareList.java |awk '{print " ",$1," ",$2}'|tr -s " " >> output.out
     rsh $server wc -c /u2/web/$CompareList.class |awk '{print " ",$1," ",$2}'|tr -s " " >> output.out
done

我的文件列表是不带文件扩展名的文件位置/名称的静态列表。出于安全原因,我已经删除了很多我在其中所做的事情,但这显示了我正在使用的循环/命令:

那是在我使用 ls -l 编辑它以获取要导出到结果集的文件名/大小之后

答案1

听起来您的脚本正在解析ls(或wc) 的输出只是为了获取文件名列表。不要这样做;这是一个非常糟糕的主意。

要获取简单的管道分隔的文件名列表及其大小(以字节为单位),您可以使用:

stat -c '%n|%s' /path/to/directory/*

或者,解析目录树:

find /path/to/directory -type f -exec stat -c '%n|%s' "{}" \;

答案2

这是我通常针对目录树运行的命令来列出文件及其大小:

find <directory>/* -type f -print0 | xargs -0 -n1 du -h

您还可以按文件大小排序(我发现这对我的工作很有用):

find <directory>/* -type f -print0 | xargs -0 -n1 du -h | sort -n -r

相关内容