我找到了这个任务:
在目录中查找所有文件
/srv/SAMPLE002
与文件扩展名.tar
。将已匹配的文件名列表(每行一个)写入/opt/SAMPLE002/toBeCompressed.txt
已创建的文件中。请确保您指定的相对路径的每个文件,使用/srv/SAMPLE001
作为相对路径的基本目录。
我创建SAMPLE001
和SAMPLE002
目录srv
。在SAMPLE002
我创建了5个带有.tar
扩展名的文件。我对任务的这一部分有疑问:
请确保您指定的相对路径的每个文件,使用
/srv/SAMPLE001
作为相对路径的基本目录。
我这样尝试:
find /srv/SAMPLE001/../SAMPLE002 -type f -name "*.tar"
这对我的任务来说是一个好的解决方案吗?我的意思是:每个文件的相对路径。也许有比我更好的解决方案。
否。您从命令中获得的路径不是相对的。
该命令没有为明确指定动作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] 删除。
我来说两句