我有一个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
命令后面加上awk
, FNR==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 "
,同样适用于包含空格或制表符的文件名。