我正在检查文件是否存在,find
命令如下 -
find ${pwd} | grep 'Test.*zip'
此命令返回带有相对路径的输出,例如 -
./ReleaseKit/Installable/Test-5.2.0.11.zip
有没有办法使用find
命令获取找到的文件的绝对路径?
答案1
你的问题
find ${pwd} | grep 'Test.*zip'
是你没有一个名为 的变量pwd
。所以这与 相同find | grep 'Test.*zip'
。您想将当前目录作为起点。
要么使用$(pwd)
要么$PWD
代替${pwd}
.$(pwd)
运行pwd
程序,同时使用其他 POSIX shell 维护$PWD
的变量来给出当前目录。bash
并非所有 shell 都是 POSIX。您还应该引用变量或命令替换,以防止目录路径中出现异常字符,您最终会得到
find "$PWD" | grep 'Test.*zip'
答案2
是的,但是你的句子需要更多参数(路径+文件+操作),也许如果你像这样构造你的命令:
$> find {path} -iname {file} -exec {action} \;
使用阅读链接获取绝对路径的命令(在 Linux 和 OS/X 中)
前任。
$> find ./www/project/ -iname 'Test*.zip' -exec readlink -f {} \;
/opt/www/project/Test-5.2.0.11.zip
/opt/www/project/Test-5.2.0.13.zip
答案3
报告的路径名将find
始终以在其下找到它的顶级搜索路径开头。因此使用绝对路径作为搜索路径:
find "$PWD" -name 'Test*zip'
该PWD
变量将保存当前目录的绝对路径名。
如果没有给出搜索路径, GNUfind
默认使用当前目录.
(“点”)作为搜索路径,这就是您的情况发生的情况,因为您没有名为 的变量pwd
。这意味着find
检查的所有路径名都以点开头。当未给出搜索路径时,大多数其他实现都会发出错误:
$ unset pwd
$ find $pwd
usage: find [-dHhLXx] [-f path] path ... [expression]