我正在尝试为目录中的每个文件执行命令,但同时使用它们的绝对路径(例如/home/richi/mydir/myfile.py
)而不是它们的相对路径(例如myfile.py
)。
换句话说,我想基于目录的绝对路径对目录中的文件执行命令-类似于for file in *.py; do thecommand -a "$file"; done
但不完全相同。
我之所以这样问,是因为我试图实现在Ubuntu 14.04环境中运行的Travis CI脚本,该脚本将安装并用于pyminifier
递归地压缩目录中的所有Python代码文件。
请注意,我要问的可能与此帖子相似,但事实并非如此。
由于您使用的是具有完整用户名的标准Linux发行版,因此您可以使用以下realpath
命令:
打印解析的绝对文件名…
例如:
$ pwd
/home/abarnert/src/test
$ touch 1
$ realpath 1
/home/abarnert/src/test/1
而已。
如果您不知道如何从内部使用它bash
,则可以使用以下$(…)
语法调用子命令:
$ echo $(realpath 1)
/home/abarnert/src/test/1
当然,您希望将变量的值传递给它file
,但这很简单:
$ file=1
$ echo $(realpath "$file")
/home/abarnert/src/test/1
我假设您在这里使用bash。使用不同的sh样式外壳,情况将有所不同。用tcsh或zsh或fish或其他东西,可能会更加不同。
一个真正古老的用户区或一个真正精简的用户区(例如,对于嵌入式系统)可能不包括realpath
。在这种情况下,可以使用readlink
,因为GNU版本通常会添加所有内容,包括几个厨房水槽,并且可以用作realpath
替代品。
或者,如果最糟的话,Pythonrealpath
自2.2起就提供了一个函数:
$(python -c 'import os,sys; print(os.path.realpath(sys.argv[1]))' "$file")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句