【问题标题】:Save only one string of multi-string command output只保存一串多串命令输出
【发布时间】:2025-11-30 08:00:02
【问题描述】:

我有一个 bash 命令来查找子目录中最大的文件。我想将输出保存到一个变量中,以便与其他命令一起使用。

bigile=$(find /path/to/directory -type f -exec du -Sh {} + | sort -rh | head -n 1)

不幸的是,这会同时保存文件大小和文件路径。

echo $file
216K /path/to/directory/bigfile

如果我将变量传递给将文件作为输入的命令,我会看到一个错误:

wc -lm $file
wc: cannot access '216K': No such file or directory
6333 217649 /home/path/to/directory/bigfile

显然,我得到了我需要的输出,但我不想要错误消息。如何只保存find 命令输出的第一个字符串?

谢谢!!!

【问题讨论】:

    标签: linux bash shell unix gnome-terminal


    【解决方案1】:

    您能否尝试关注一下,如果这对您有帮助,请告诉我。

    bigile=$(find /path/to/directory -type f -exec du -Sh {} + | sort -rh | awk 'FNR==1{print $2}')
    

    解释: 只需在sort 命令之后添加awk 并且FNR==1 条件将确保仅第一行被拾取,然后也打印该行的第二个字段。

    【讨论】:

      【解决方案2】:

      您还可以从扩展中去除前导文件大小:

      echo "${file#* }"
      

      【讨论】:

        【解决方案3】:

        在 bash 中有很多方法可以做到这一点(sed、awk、substring removal。试试这个:

        bigile="$(find /path/to/directory -type f -exec du -Sh {} + | sort -rh | head -n1 | cut -f2-)"
        

        在您的命令中添加了cut -f2- 和引号"。也适用于包含空格或制表符的文件名。

        【讨论】:

          最近更新 更多