Formatting 复制ls在两次使用ls时所做的正确对正

Formatting 复制ls在两次使用ls时所做的正确对正,formatting,ls,text-to-column,Formatting,Ls,Text To Column,如果我有两个文件,tmp.txt和tmp.pdf,一个大一个小,当我键入ls-al-tmp.*时,一切都正确对齐,我得到了这个输出 -rw-r--r-- 1 simon simon 615316 Oct 17 20:55 tmp.pdf -rw-r--r-- 1 simon simon 0 Oct 17 20:55 tmp.txt 出于一个无关紧要的原因,我希望能够将两个独立的ls-al命令的输出写入一个文件,然后cat该文件并获得相同的输出。但当然,如果我这样做: ls -al t

如果我有两个文件,
tmp.txt
tmp.pdf
,一个大一个小,当我键入
ls-al-tmp.*
时,一切都正确对齐,我得到了这个输出

-rw-r--r-- 1 simon simon 615316 Oct 17 20:55 tmp.pdf
-rw-r--r-- 1 simon simon      0 Oct 17 20:55 tmp.txt
出于一个无关紧要的原因,我希望能够将两个独立的
ls-al
命令的输出写入一个文件,然后
cat
该文件并获得相同的输出。但当然,如果我这样做:

ls -al tmp.txt > foo
ls -al tmp.pdf >> foo
然后,
catfoo
,我明白了

-rw-r--r-- 1 simon simon 0 Oct 17 20:55 tmp.txt
-rw-r--r-- 1 simon simon 615316 Oct 17 20:55 tmp.pdf
是否有一种方法可以模拟
ls-al
产生的合理输出?显然,我可以使用
wc-ctmp.pdf
etc来确定哪个输出最大,但是我如何将这些信息转换成代码,在第一行的0之前放置必要数量的空格?非常感谢您的建议。

是的。只用

但是,如果文件名包含空格,则无法正确打印这些名称。如果您的
支持
-l
选项,则最简单的修复方法是更改为
列-t-l 9
,将列总数限制为9。另一个解决方法是使用模拟
ls
输出

myuser@mypc:~$ (
> stat --printf="%A\t%h\t%U\t%G\t%s\t%y\t%n\n" "tmp with space.txt"
> stat --printf="%A\t%h\t%U\t%G\t%s\t%y\t%n\n" tmp.small
> stat --printf="%A\t%h\t%U\t%G\t%s\t%y\t%n\n" tmp.big
> ) | column -t -s $'\t'
-rw-r--r--  1  myuser  myuser  1307    2020-10-18 12:08:45.360000000 +0700  tmp with space.txt
-rw-r--r--  1  myuser  myuser  0       2020-10-18 11:24:21.650000000 +0700  tmp.small
-rw-r--r--  1  myuser  myuser  113616  2020-10-18 11:42:04.150000000 +0700  tmp.big

但是,名称中带有制表符或换行符的文件仍然不起作用。您可以尝试使用
stat--printf=“%A\0%h\0%U\0%G\0%s\0%Y\0%n\n”tmp*| column-t-s$'\0'-l9
将分隔符更改为null,但不知何故我的
column
无法识别
\0
为分隔符。不确定其他专栏的版本,只需在您的电脑上试用,即可看到

精彩绝伦,非常感谢。我尽我所能避免文件名中出现空格,当然还有换行符,所以第一个解决方案很好。这并不重要,但我对我的ubuntu 18.04平台不支持的
ll
感到好奇,我也不能
apt
它。你能告诉我它来自哪里吗?@LeoSimon
ll
ls-alF
的别名,它默认存在于Ubuntu和我使用过的大多数发行版中
myuser@mypc:~$ (
> stat --printf="%A\t%h\t%U\t%G\t%s\t%y\t%n\n" "tmp with space.txt"
> stat --printf="%A\t%h\t%U\t%G\t%s\t%y\t%n\n" tmp.small
> stat --printf="%A\t%h\t%U\t%G\t%s\t%y\t%n\n" tmp.big
> ) | column -t -s $'\t'
-rw-r--r--  1  myuser  myuser  1307    2020-10-18 12:08:45.360000000 +0700  tmp with space.txt
-rw-r--r--  1  myuser  myuser  0       2020-10-18 11:24:21.650000000 +0700  tmp.small
-rw-r--r--  1  myuser  myuser  113616  2020-10-18 11:42:04.150000000 +0700  tmp.big