如何使“查找”返回相对路径?

帕维尔

我找到了这个任务:

在目录中查找所有文件/srv/SAMPLE002与文件扩展名.tar将已匹配的文件名列表(每行一个)写入/opt/SAMPLE002/toBeCompressed.txt已创建的文件中请确保您指定的相对路径的每个文件,使用/srv/SAMPLE001作为相对路径的基本目录。

我创建SAMPLE001SAMPLE002目录srvSAMPLE002我创建了5个带有.tar扩展名的文件我对任务的这一部分有疑问:

请确保您指定的相对路径的每个文件,使用/srv/SAMPLE001作为相对路径的基本目录。

我这样尝试:

 find /srv/SAMPLE001/../SAMPLE002  -type f -name "*.tar"

这对我的任务来说是一个好的解决方案吗?我的意思是:每个文件的相对路径。也许有比我更好的解决方案。

卡米尔·马乔洛夫斯基(Kamil Maciorowski)

否。您从命令中获得的路径不是相对的。

该命令没有为明确指定动作find,因此使用隐式-print-print打印路径名。路径名是通过以下方式创建的

[…]每个路径操作数应按原样进行评估,包括所有尾随字符;层次结构中遇到的其他文件的所有路径名都应由当前路径操作数的串联,如果当前路径操作数未以1结尾的<slash>以及相对于路径操作数的文件名组成。[…]

这意味着,如果您指定/srv/SAMPLE001/../SAMPLE002作为唯一的路径操作数(统计点),则只能从此-print确切字符串开始的

现在检查相对路径名的定义

相对路径
名不是以<slash>字符开头的路径名。

您可以从命令中获得的任何内容都必须以/(<slash>字符)开头,因为您使用的路径操作数以开头/然后根据定义,这些路径名不是相对的。从中获取相对路径名的唯一方法find … -print是提供相对路径操作数(起点)。

在您的情况下,可能是这样的:

cd /srv/SAMPLE001 && find ../SAMPLE002 -type f -name "*.tar"

&&以防万一cd)。现在,每个路径名都必须以开头../SAMPLE002.tar您要查找的文件的路径将以开头../SAMPLE002/根据定义,它们将是相对的。

定义非常简洁。要知道相对性来自何处,需要知道* nix如何解析路径如果您知道这一点,那么您将同意

/srv/SAMPLE001/../SAMPLE002/foo.rar

foo.rar无论当前工作目录是什么,都将指向相同的目录。

../SAMPLE002/foo.rar

将取决于(依赖)当前的工作目录。后一个路径可能指向也可能不指向右侧foo.rar,具体取决于当前的工作目录。这是相对的要点。如果当前工作目录是/srv/SAMPLE001路径,则该路径将指向正确的文件。

注意,如果/srv/SAMPLE001/不存在或/srv/SAMPLE001/..不存在(例如SAMPLE001常规文件),则/srv/SAMPLE001/../SAMPLE002/foo.rar无法解决。/srv/SAMPLE001在这种情况下,这是唯一的依赖但是,依存关系并不构成/srv/SAMPLE001/../SAMPLE002/foo.rar相对路径。


您的原始命令根本不会写入/opt/SAMPLE002/toBeCompressed.txt使用适当的运算符重定向的输出find例如:

cd /srv/SAMPLE001 && find ../SAMPLE002 -type f -name "*.tar" >/opt/SAMPLE002/toBeCompressed.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章