【问题标题】:Issue Getting File Size with Shell Script使用 Shell 脚本获取文件大小的问题
【发布时间】:2020-05-05 08:34:31
【问题描述】:

我有一个简单的 shell 脚本,可以读取我上传的文件日志,我想输出文件大小和行数(CSV 标头少一个)。我循环正确,但是当我尝试使用 find、wc 或 stat 来获取文件的大小时,它会出现“没有这样的文件或目录”的错误。当我在终端中尝试相同的命令时,它会按预期返回大小。

fileSizeBytes=$(sudo wc -c "$fileName" | awk {'print $1'})
fileSizeKb=$((fileSizeBytes/1024))
lineCount=$(sudo wc -l "$fileName" | awk {'print $1'})
lineCount=$(($lineCount-1))

fileName 变量包含文件的完整路径,我检查了所有用户是否具有读/写访问权限。无论我是使用我的帐户还是以 root 身份运行脚本,结果都是一样的。

wc: /plan/files/Today.csv: No such file or directory
wc: /plan/files/Today.csv: No such file or directory
wc: /plan/files/ERMS_STOCK_05052020.csv: No such file or directory
wc: /plan/files/ERMS_STOCK_05052020.csv: No such file or directory
wc: /plan/files/ERMS_RES_05052020.csv: No such file or directory
wc: /plan/files/ERMS_RES_05052020.csv: No such file or directory

任何想法可能导致这种情况?我可以在我的 Mac 上使用类似的脚本(必须更改一些命令),但在我的 RHEL 7.7 VM 上我遇到了这个错误。

干杯

【问题讨论】:

  • 文件是否存在? Any ideas what might be causing this? 文件可能不存在。您发布了 6 条错误消息,但您发布的代码仅取决于您发布的代码中未设置的某个变量 fileName。您手动更改fileNamefileName是怎么改的?
  • 你真的有一个/plan/...绝对路径,而plan不在根目录下?
  • 是的,根目录下有一个目录 /plan/,我在其中创建了 /files 目录来存储上传文件。文件在那里,如果我运行“wc -c /plan/files/ERMS_STOCK_05052020.csv”,我会得到我期望的输出,但是当脚本执行时,我会得到没有这样的文件错误。我正在使用 sed 从上传文件列表中提取路径和文件名,并分配给变量 fileName。
  • 您的文件是否来自 Windows?还是距离 Windows 不到 2 米?
  • 据我所知,这些文件只存在于 *nix 上。他们一直在 RHEL 和 Mac 上,但如果他们一直在 Win 上,你会建议什么?在这一点上,我非常愿意尝试任何事情。自从我在过去 9 天将它迁移到 RHEL 以来,我一直在以一种或另一种形式处理这个脚本中的错误。

标签: shell wc


【解决方案1】:

感谢您的意见。我终于明白了可能发生的事情,那令人抓狂的尾随空白。我解析日志文件的方式是,路径末尾有一个空格。一点点 sed 魔法将其剥离,一切正常!

【讨论】:

    猜你喜欢
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多