2017-09-24 80 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#* }"