我想获取从当前文件夹到/
. 例如,对于目录:/var/lib/program/subfolder
,我想要一个输出,例如:
$ pwd
/var/lib/program/subfolder
$ magic_ls_-l_command somefile
drwxr-xr-x 10 root root 4096 May 15 20:20 var
drwxr-xr-x 10 root root 4096 May 15 20:20 lib
drwxrwxr-x 10 root user 4096 May 16 20:21 program
drwxrwxr-x 10 root user 4096 May 16 20:21 subfolder
-rwxrwxr-- 1 root user 4096 May 16 20:22 somefile
Run Code Online (Sandbox Code Playgroud)
我不在乎顺序(从/var
到/subfolder
或相反)、硬链接的数量甚至日期。我只是将它们写下来以模拟ls -l
输出。另外,我不在乎每个文件名如何打印(/var
和/lib
、var
和lib
、或/var
和/var/lib
)。我只对所选文件的路径中每个文件/目录的所有权或pwd
到/
.
如果我应该安装一些程序,我在 Ubuntu 20.04 下。
这个问题已经在superuser.com 中得到了回答(我不知道我是否可以将一个站点的问题标记为与另一个站点的重复)。解决方案就像写一样简单(假设我与目标文件名在同一目录中):
$ namei -l $(pwd)/somefile ## 或 `namei -l $(realpath -s somefile)`
因为-l
,它以长格式列出了每个父目录的基本权限。
我必须使用pwd
/realpath
因为namei
不解析相对路径。如果我不在目标目录中,只需写下完整路径。
小智 5
我为你写了一个 bash 脚本。如果名称中有空格,它会有一些错误。如果它打扰您,我很高兴在评论中提出更改建议。
#!/bin/bash
if [ ! -z "$1" ] && [ -e "$1" ]
then
path=`realpath -s "$1"` # read argument as absolute path
else
path="$PWD" # No valid argument, so we take pwd
fi
paths=""
while [ "$path" != / ];do
paths+=" $path"
path=`dirname "$path"`
done
paths+=" $path" # Adding / to pathlist too
ls -ld $paths
Run Code Online (Sandbox Code Playgroud)
使用realpath -s
您可以捕获绝对路径,但您不会遵循链接。如果没有给出参数,我们将使用 pwd 作为要列出的文件/目录。
我们将每个路径附加到一个列表中。这给了我们最终更好的布局的优势,这样我们就能得到一张漂亮的表,因为我们ls
只运行一次。
输出:
bobafit:~$ magic_ls_-l_command /usr/bin/python3
drwxr-xr-x 21 root root 4096 Jun 20 10:07 /
drwxr-xr-x 14 root root 4096 Sep 5 2019 /usr
drwxr-xr-x 2 root root 110592 Jun 20 10:07 /usr/bin
lrwxrwxrwx 1 root root 9 Apr 7 12:43 /usr/bin/python3 -> python3.8
Run Code Online (Sandbox Code Playgroud)
我制作了这个小脚本来做到这一点。我cd "$1"; pwd
用来获取当前目录,这样路径就不会被规范化(比如说,如果你尝试magic-ls .
你的当前目录是 /var/lib/postgres,但它是 /mnt/postgres 的符号链接,你会得到/var
, /var/lib
and /var/lib/postgres
,同时使用realpath
你会得到/mnt
和/mnt/postgres
)
magic-ls() {
local current=$(cd "$1"; pwd)
while [[ $current != '/' ]]; do
ls -ld "$current"
current=$(dirname "$current")
done
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例输出:
[leodag@desk ~]$ magic-ls
drwx------ 1 leodag leodag 2722 jun 21 13:49 /home/leodag
drwxr-xr-x 1 root root 18 mai 2 2019 /home
Run Code Online (Sandbox Code Playgroud)
顺便说一下,它也可以在没有参数的情况下工作,因为cd ""
它不会更改您的目录。
编辑:realpath
从 while 检查中删除,因为如果/
路径中有链接,则可能会导致意外结果,并且不需要。
归档时间: |
|
查看次数: |
372 次 |
最近记录: |