只保存一个多string命令输出的string

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

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

不幸的是,这节省了文件大小和文件path。

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

如果我将variables传递给命令把这个文件作为input,我看到一个错误:

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

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

谢谢!!!

你能不能请跟随,让我知道这是否有助于你。

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

说明:sort命令后面加上awkFNR==1条件会保证只有第一行被拾取,然后打印该行的第二个字段。

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

 echo "${file#* }" 

有许多方法可以在bash中执行此操作(sed,awk, substring remove) 。试试这个:

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

在你的命令中加入了" cut -f2-和quotes " ,同样适用于包含空格或制表符的文件名。