嘿所以我正在写一个linux脚本,我发现了一个有趣的发现。
我有一个命令,它会根据它的大小对目录中的文件进行排序,并打印出最大的文件。命令如下
find . -type f -ls | sort -r -n -k7 | head -n 1
这将在
之类的内容中打印出来 895918591 8 -r-w-x 1 user01 xdf 1931 28 march 23:21 ./myscript.sh
所以我想单独获取最大的文件大小并打印出来。为了将它分开,我使用cut -d' ' -f2
问题,这只留下空输出。那是因为空间量不一致。
所以我尝试做这样的事情
find . -type f -ls | sort -r -n -k7 | head -n 1 | tr -d [:blank:] | cut -d' ' -f2
问题是,这将删除所有空格,现在我无法通过公共分隔符将它们分开。所以我问,有没有办法替换所有空格,然后用一个空格替换它们?
如果不是,至少可以通过其他方式获得该字节数?
答案 0 :(得分:1)
您可以使用cut
代替awk
:
find . -type f -ls | sort -r -n -k7 | head -n 1 | awk '{print $2}'
但是,您甚至可以使用head
awk
find . -type f -ls | sort -r -n -k7 | awk '{print $2; exit}'
答案 1 :(得分:1)
Sed和Awk是这类工具的绝佳工具。 Sed是一种基于正则表达式的语言,它修改了Sed程序接收的每一行的内容,而Awk也是一个面向行的工具,可以自动将其输入拆分为字段。
在Sed中将空白序列转换成一个空格(用/\s+/
替换的所有匹配项):
$ find ... | sed 's/\s+/ /g'
只打印Awk中每行的第一个“单词”(非空格序列):
$ find ... | awk '{print $1}'
http://tldp.org/LDP/abs/html/sedawk.html可以帮助您开始使用这些语言。
答案 2 :(得分:1)
将多个空格转换为一个空格的工具称为tr -s
:
tr
翻译s
挤压样品:
$ cat a
hello this is a sample text with multiple spaces
$ tr -s " " < a
hello this is a sample text with multiple spaces
如果您想将每个空格转换为X,只需输入sed 's/ / /g'
。
答案 3 :(得分:1)
我认为你已经过度思考了眼前的问题:
find -type f -printf "%s\n"|sort -n|tail -n1
答案 4 :(得分:0)
您可以尝试使用printf命令来控制显示器
,而不是使用剪切stringSTO : IsStrictTotalOrder _ _
stringSTO = StrictTotalOrder.isStrictTotalOrder String.strictTotalOrder
open Data.AVL.Sets (RawIso-IsStrictTotalOrder rawIso stringSTO)
答案 5 :(得分:0)
你做错了。
以任何形式解析ls
(例如find
的{{1}}选项)是不好的做法。
不要使用-ls
输出。 ls
是用于交互式查看目录元数据的工具。任何使用代码解析ls
输出的尝试都会被破坏。
我强烈建议您进一步阅读有关此主题的内容。阅读Parsing ls。
相反,请使用以下函数:
ls