在 bash 脚本中从 ls -l 输出管道结果

0 linux ls bash awk

所以我使用了:

getent passwd $2 | awk -F: '{print "|Username: " $1 "\n|Password: " $2 "\n|Uid: " $3 "\n|Gid: " $4 "\n|Comment: " $5 "\n|Home: " $6 "\n|Shell: " $7 "\n"}'
Run Code Online (Sandbox Code Playgroud)

将用户信息输入到一个整洁的列表中。

我想对文件夹做同样的事情。我想要来自“ ls -l”命令的所有信息,但不是像测试块那样出现,我希望它逐个列出。

我可以使用一个awk命令,ls并且可以使用我之前使用的相同方法吗?

xen*_*oid 5

由于您使用的是 Linux,您应该查看stat具有正确格式 ( -c, --format)的命令。鲜为人知的特性,该格式接受 C 风格的长度说明符,因此请尝试例如:

stat -c 'File: %-40n Size: %6s Flags: %8A' * 
Run Code Online (Sandbox Code Playgroud)

您可以在格式中放置任意字符串,甚至可以在其中放置换行符(使用$'string'语法):

stat -c $'--------------\nFile:     %n\nSize:     %s\nFlags:    %A' /boot/*
--------------
File:     /boot/abi-4.13.0-45-generic
Size:     1501528
Flags:    -rw-r--r--
--------------
File:     /boot/config-4.13.0-45-generic
Size:     213220
Flags:    -rw-r--r--
--------------
File:     /boot/config-4.15.0-72-generic
Size:     217468
Flags:    -rw-r--r--
--------------
File:     /boot/config-4.15.0-74-generic
Size:     217503
Flags:    -rw-r--r--
--------------
File:     /boot/config-4.15.0-76-generic
Size:     217503
Flags:    -rw-r--r--
Run Code Online (Sandbox Code Playgroud)