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


26

有没有一种方法可以获取正在搜索的文件的绝对路径?

例如:

find .. -name "filename"

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

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

谢谢


Answers:


15

尝试类似的方法:

find "$(cd ..; pwd)" -name "filename"

谢谢,我只是在测试$(cd ..; pwd)。这工程确定,但如果我在终端独自做到这一点,我不能得到的父目录......我得到“击:<目录>:是一个目录,如果我这样做,$(cd ..; echo "something")我得到”的东西:不是命令”
JorgeeFG,2014年

您的意思是像单独的命令吗?然后,您需要忽略美元符号:(cd ..; pwd)
审阅者2014年

谢谢,就是这样。关于为什么要删除$的任何参考,它将如何影响子外壳?
JorgeeFG 2014年

1
是的( ... )意味着在子shell中执行,输出将写入stdout。$( ... )代表“命令替换”。后者可以用作可变扩展。
审查者

查找/

12

尝试使用以下-exec选项find

find .. -name "filename" -exec readlink -f {} \;

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


这将在每个文件上调用readlink,因此它将非常无效。
bac0n

9

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

find ~+ -type f -name "filename"

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

find /home/yourusername/Desktop -type f -name "filename"

并打印如下结果:

/home/yourusername/Desktop/filename

如果要将这种方法用于当前工作目录的目录,则需要cd在调用之前find

cd .. && find ~+ -type f -name "filename"

7

最简单的方法是

find "$(pwd -P)" -name "filename"

是! 或find `pwd -P` -name "filename"
Apollys

这将在当前目录中找到文件,而不是从父目录中找到文件。
bac0n

1

同样使用PWD可以显示完整目录。Pwd将显示您所在的所有目录,就像扩展文件名一样。希望这会有所帮助。


1

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

realpath $(find . -type f -name filename -print -quit)

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

find . -type f -name filename | xargs realpath

以前的评论已删除,+ 1,干得好@Wyrmwood
Sergiy Kolodyazhnyy

1

使用参数Expansion删除最后一个目录组件。

find "${PWD%/*}" -name 'filename'

如何使用mapfile将输出结果从find保存到索引数组以供以后使用的示例。

mapfile -t -d '' < <(find ${PWD%/*} -name 'filename' -print0)

(如果未指定任何数组名,则MAPFILE将是默认的数组名)。

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.