find . -type f -ls | cut -c 2- | sort -n -k 7 >file.txt ; less <file.txt
这是一个非常奇怪的命令。你确定你复制的正确吗?它是从哪里来的?
我建议分解命令,通过less 管道输出部分版本的输出,这样您就可以看到发生了什么。 (当然,如果您还没有阅读所有相关的手册页。)
find . | less
find . -type f | less
find . -type f -ls | less
find . -type f -ls | cut -c 2- | less
...
或者使用head 而不是less,这样您就可以看到输出的前几行。
find . -type f递归查找当前目录下的所有普通文件('.')。 -ls 选项告诉它为每个文件显示一行,格式类似于ls -l 生成的格式。
find ... -ls 的输出以数字 inode 号开头。该数字可能带有前导空格。
cut -c 2- 删除less 输出的每一行的前两个字符。我不知道你为什么要这么做。我怀疑这个想法是确保行首没有空格,但这不是一种可靠的方法。如果 inode 数量恰好足够小,则可能有三个或更多的前导空格。使用sed 's/^ *//' 会更好——但这甚至没有必要。
sort -n -k 7 在第 7 个空格分隔的字段上进行数字排序,这恰好是文件的大小(以字节为单位)。所以这是按文件大小从最小到最大对列表进行排序。我猜,之前的 cut 命令是为了确保即使原始行以空格开头,大小也是第 7 个字段,但这不是必需的(除非它可能是用于行为有点的 sort 版本不同)。
输出写入file.txt,然后使用less <file.txt 查看。 < 很傻; less 完全能够读取在其命令行上命名的文件,因此 less file.txt 可以工作。显然用户想要保存输出;否则,将sort 的输出通过管道传输到less 会更有意义。 tee 命令在这里也很有用:find ... | tee file.txt | less。
find ... -ls 的输出与ls -l 的输出一样,是为了人类可读的;它不是用于自动文本处理。从一种实现到另一种实现可能会略有不同。有一些方法可以产生更常规的输出。如果您有 GNU find,它有一个 -printf 选项,可让您准确地指定它打印的信息以及打印顺序。