使用'find'命令获取文件的绝对路径

Jor*_*eFG 50 command-line find

有没有办法获得正在搜索的文件的绝对路径?

例如:

find .. -name "filename"
Run Code Online (Sandbox Code Playgroud)

它给了我类似的结果,../filename但我想要完整的路径。

我需要的是在父目录及其子目录中找到特定文件,稍后我将在另一个脚本中使用该文件。

谢谢

des*_*ert 31

您可以使用bash's Tilde Expansion 来获取当前工作目录find的绝对路径,这种方式也会打印结果的绝对路径:

find ~+ -type f -name "filename"
Run Code Online (Sandbox Code Playgroud)

如果在 中执行~/Desktop,则扩展为

find /home/yourusername/Desktop -type f -name "filename"
Run Code Online (Sandbox Code Playgroud)

并打印结果如下:

/home/yourusername/Desktop/filename
Run Code Online (Sandbox Code Playgroud)

如果要在当前工作目录的目录中使用此方法,则需要cd在调用之前find

cd .. && find ~+ -type f -name "filename"
Run Code Online (Sandbox Code Playgroud)


Scr*_*zer 25

尝试类似:

find "$(cd ..; pwd)" -name "filename"
Run Code Online (Sandbox Code Playgroud)

  • @Scrutinizer - 我认为你误解了 find 的工作原理。如果您在搜索中使用完整路径,您将在输出中获得完整路径。`查找 /home/your_user -name foo`。由于OP使用“../”,很难猜测给出答案的完整路径。 (2认同)
  • @JorgeeFG ```$(builtin cd ..; pwd)``` 将取消函数、别名。 (2认同)

Syl*_*eau 18

尝试使用以下-exec选项find

find .. -name "filename" -exec readlink -f {} \;
Run Code Online (Sandbox Code Playgroud)

注意:readlink打印符号链接或规范文件名的值。

  • 这将对每个文件调用 readlink,因此效率非常低。 (2认同)

小智 16

最简单的方法是

find "$(pwd -P)" -name "filename"
Run Code Online (Sandbox Code Playgroud)

  • 是的!或者``find `pwd -P` -name "文件名"`` (2认同)

小智 6

试试这个方法:

find $PWD -name "filename"
Run Code Online (Sandbox Code Playgroud)


Wyr*_*ood 5

这对我有用,但只会返回第一次出现。

realpath $(find . -type f -name filename -print -quit)
Run Code Online (Sandbox Code Playgroud)

获取所有事件的完整路径(如 Sergiy Kolodyazhnyy 所建议的)

find . -type f -name filename | xargs realpath
Run Code Online (Sandbox Code Playgroud)