bash相当于Python的os.path.normpath?

2024-06-26 10:08:23 发布

您现在位置:Python中文网/ 问答频道 /正文

bash等价于^{}?具体来说,我对删除执行find时给出的前导./感兴趣。在

matt@stanley:~/src/libtelnet-0.20/test$ find
.
./Makefile
./Makefile.in
./Makefile.am
...

Tags: intestsrcbashmattfindammakefile
3条回答

为此,您只需通过sed管道输出,不必对整个路径进行规范化:

your_command_goes_here | sed 's?^\./??'

这将删除一行开头的所有./序列。在

以下文字说明了这一点:

^{pr2}$

如您所见,对于我的临时shell脚本,我有一个相当直观的命名标准:-)

我正在努力寻找一个我想使用os.path.normpath的案例。在具有符号链接的系统(如unix或Windows)上,它返回的值可能不指定同一个文件:

$ mkdir /tmp/one /tmp/one/two
$ ln -s /tmp/one/two /tmp/foo
$ python -c 'import os.path; print os.path.normpath("/tmp/foo/..")'
/tmp
$ ls /tmp/foo/..
two

/tmp/foo/../tmp/one,不是{}!在

在Linux上,readlink -- "$filename"规范化路径中的所有符号链接。它返回的文件名在执行命令时将同一个文件指定为$filename(以后,如果所涉及的符号链接之一被更改,则可能不会)。但大多数情况下,这是不必要的:只要保持$filename原样。在

如果出于美观的原因想删除./前缀,只需将其明确地去掉。在

^{pr2}$

我通常通过使用find-printf参数来实现这一点。在

如果您在多个路径中搜索,则以下操作正常:

find path1 path2

如果您在.中搜索,则以下操作正常:

^{pr2}$

如果你有一个混合路径(例如find path1 path2 .),你必须使用sed。在

相关问题 更多 >