Shell /终端:使用目录的绝对路径对目录中的所有文件执行命令

时间:2018-07-21 02:37:56

标签: python shell terminal travis-ci

我正在尝试为目录中的每个文件执行命令,但同时使用其绝对路径(例如/home/richi/mydir/myfile.py)而不是相对路径(例如myfile.py)。

换句话说,我想根据目录的绝对路径对目录中的文件执行命令-与for file in *.py; do thecommand -a "$file"; done类似,但不完全相同。

之所以问这个问题,是因为我试图实现在Ubuntu 14.04环境中运行的Travis CI脚本,该脚本将安装并使用pyminifier递归地压缩目录中的所有Python代码文件。

  

请注意,我要问的内容可能类似于this帖子,但并非如此。

1 个答案:

答案 0 :(得分:0)

由于您使用的是具有完整用户名的标准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的替代品。

或者,如果情况变得更糟,Python从2.2开始就带有realpath函数:

$(python -c 'import os,sys; print(os.path.realpath(sys.argv[1]))' "$file")