2017-09-24 78 views
2

我有一个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命令输出的第一个字符串?

谢谢!

回答

2

请问您是否可以尝试以下方法,并告诉我是否可以帮助您。

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

说明:简单相加后sort命令awkFNR==1条件将确保第一行只得到拾起然后打印该行的第二场了。

0

有很多方法可以做到这在bash(SED,AWK,substring removal试试这个:。

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

新增cut -f2-以及行情"你的命令也与含有空格或制表符的文件名工作

1

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

echo "${file#* }"