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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell / Terminal:使用绝对路径为目录中的所有文件执行命令相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

由于您使用的是具有完整用户空间的标准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或鱼或其他东西,它可能会更加不同。


一个非常古老的用户空间,或者真正被剥离的用户空间(例如,用于嵌入式系统)可能不包括realpath。在这种情况下,您可以使用readlink,因为GNU版本通常会添加所有内容,包括几个厨房水槽,并且可以用作realpath替代品。

或者,如果最糟糕的情况发生,Python自2.2以来就带有realpath函数:

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

以上是关于Shell / Terminal:使用绝对路径为目录中的所有文件执行命令的主要内容,如果未能解决你的问题,请参考以下文章

linux系统的学习经验首篇

Shell脚本-if语句

Shell脚本怎样转相对路径为绝对路径

[转]如何取得当前正在执行的shell脚本的绝对路径?

[Shell]获取当前正在执行脚本的绝对路径

确定shell程序中的相对路径还是绝对路径