Bash:仅抓住第二行和最后一行输出(ls -lrS)

Len*_*nny 2 bash shell awk ls

我希望获得ls -lrS命令输出的第二行和最后一行.我一直在使用ls -lrS | (head -2 | tail -1) && (tail -n1)但它似乎只获得第一行,我必须按控制C来阻止它.

我遇到的另一个问题是使用awk命令,我只想获取文件大小和文件名.如果我得到正确的线(第二个和最后一个),我想要的输出就是

files=$(ls -lrS | (head -2 | tail -1) && (tail -n1) awk '{ print "%s", $5; "%s", $8; }' )
Run Code Online (Sandbox Code Playgroud)

我希望它会打印出来:

1234 file.abc

12345 file2.abc

bis*_*hop 5

使用格式稳定的GNU stat命令:

stat --format='%s %n' * | sort -n | sed -n '1p;$p'
Run Code Online (Sandbox Code Playgroud)

如果您使用的是BSD stat,请相应调整.

如果您想要更多地控制哪些文件进入此计算,并且可以说更好的可移植性,请使用find.在这个例子中,我得到当前目录中的所有非点文件:

find -maxdepth 1 -not -path '*/\.*' -printf '%s %p\n' | sort -n | sed -n '1p;$p'
Run Code Online (Sandbox Code Playgroud)

如果您的目录包含两个或更少的条目,或者您的任何条目的名称中都有换行符,请注意.

  • 我认为,顺便说一下,没有人*计划*让文件名有换行符,就像没有人计划在C语言编写程序时让字符串溢出缓冲区.问题是当它们发生时你用它们做什么.:) (2认同)