Answers:
尝试类似的方法:
find "$(cd ..; pwd)" -name "filename"
$(cd ..; pwd)
。这工程确定,但如果我在终端独自做到这一点,我不能得到的父目录......我得到“击:<目录>:是一个目录,如果我这样做,$(cd ..; echo "something")
我得到”的东西:不是命令”
(cd ..; pwd)
( ... )
意味着在子shell中执行,输出将写入stdout。$( ... )
代表“命令替换”。后者可以用作可变扩展。
尝试使用以下-exec
选项find
:
find .. -name "filename" -exec readlink -f {} \;
注意:readlink
打印符号链接或规范文件名的值。
您可以使用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"
同样使用PWD可以显示完整目录。Pwd将显示您所在的所有目录,就像扩展文件名一样。希望这会有所帮助。
这对我有用,但只会返回第一次出现。
realpath $(find . -type f -name filename -print -quit)
获取所有事件的完整路径(如Sergiy Kolodyazhnyy所建议)
find . -type f -name filename | xargs realpath
使用参数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