“查找”指令说明

“查找”指令说明

我有以下说明:

  1. 查找目录中所有/x/y/z扩展名为.jpg.
  2. 写出匹配列表文件名,每行一个,到文件/x/y/file1.txt.
  3. 确保指定每个文件的绝对路径。

您能帮助理解该说明吗?我最初想到使用以下命令:

find /x/y/z -name '*.jpg' -exec basename '{}' >> /x/y/file1.txt \;

但是,鉴于最后一条指令(...绝对路径),我认为:

find /x/y/z -name '*.jpg' -exec pathname '{}' >> /x/y/file1.txt \;

哪个是对问题/指令的正确响应(命令)?

答案1

在这个答案中,我假设您的说明的第二点实际上意味着“路径名”而不是“文件名”。否则第三点就没有意义了。

默认情况下,该find实用程序将输出所找到文件的相对于顶级搜索路径的完整路径。

在命令中

find /x/y/z -name '*.jpg' -print

...find将打印出路径名,例如/x/y/z/foo/bar/baz.jpg.如果顶级搜索路径是某个目录的绝对路径名,则输出将自动是找到的文件的绝对路径名。

另一方面,如果您使用

find x/y/z -name '*.jpg' -print

/(注意开头缺少x/y/z),那么你显然会得到相对路径名的输出。

您可以使用 Linux 上的实用程序将它们转换为绝对路径名realpath

find x/y/z -name '*.jpg' -exec realpath {} +

这会realpath调用批量找到的路径名。

在非 Linux 系统上,realpath如果安装了 GNU coreutils,则可能会安装相同的实用程序(但随后可能会调用它grealpath)。

另请参见man realpath(或man grealpath)。


重新阅读您的说明,其中没有任何内容暗示您应该使用find.find如果您只关心单个目录中的名称,则不需要使用。

这个练习也可以通过以下方式解决

printf '%s\n' /x/y/z/*.jpg >/x/y/file1.txt

这列出了.jpg目录中以 结尾的所有名称/x/y/z。如果您手头没有该目录的绝对路径,请使用

realpath x/y/z/*.jpg >/x/y/file1.txt

相关内容