【问题标题】:Get the directory of a found file - Bash [duplicate]获取找到的文件的目录 - Bash [重复]
【发布时间】:2019-03-11 19:04:18
【问题描述】:

我正在寻找我的 Laravel 项目的路径

我做了这个

sudo find / -name artisan   

我收到了

/home/forge/john/artisan  

我只想要这部分

/home/forge/john/

我试过了

sudo find / -name artisan | pwd;

我明白了

/root 

我只想要找到的文件的路径/home/forge/john/

有人可以在这里给点提示吗?


我试过了

project_path=$("dirname `sudo find / -name artisan`")
echo "$project_path"

我一直在得到

bash: line 103: dirname /home/forge/john/artisan: No such file or directory                     

/root 

【问题讨论】:

  • 我鼓励您使用来自副本的答案,因为这里的所有建议都不是最优的(例如,对于路径 /home/me/bipartisan propaganda/mydir/artisan 没有任何作用)
  • 似乎该命令本身可以工作,但是当存储到 variable 时,它开始表现得很奇怪。 project_path=$("dirname sudo find / -name artisan")
  • 命令"dirname `sudo find / -name artisan`" 本身不起作用,就像它在您的$(..) 中不起作用一样 命令dirname `sudo find / -name artisan` (不带双引号)在两者都起作用,只要命令可以据说工作
  • 你觉得这两个命令干净吗?我没有得到我想要的结果,我也不知道为什么:i.imgur.com/PWNo1yu.png
  • 没有。他们对错误的双引号也有同样的问题。命令应该是 project_path=$(dirname "$(sudo find / -name artisan)") 并带有注释“# TODO: Make this work if there are multiple or zero matches”

标签: linux bash shell ubuntu unix


【解决方案1】:

您可以使用命令dirname,它会去除路径的非目录部分

要将其与您的命令的其余部分集成,您可以这样做:

dirname `sudo find / -name artisan` 

dirname $(sudo find / -name artisan)

【讨论】:

  • 我试过你的建议更新我的帖子,这些命令在作为脚本运行时是否有效?我应该在两者之间睡一觉吗?
  • 不需要睡眠,因为反引号或 $() 中的部分首先执行,要使其成为脚本,将 'artisan' 更改为 '$0',如果文件名将是作为第一个参数传递
  • 似乎该命令本身可以工作,但是当存储到 variable 时,它开始表现得很奇怪。 project_path=$("dirname sudo find / -name artisan")
  • 我一直收到这个错误-bash: dirname /home/forge/john/artisan: No such file or directoryi.imgur.com/CSn6rsG.png
  • @Mememyselfandaverycreepy 的命令应该是 var=$(dirname `sudo find / -name artisan`) 但 StackOverflow 吃掉了内部的反引号。要编写带有嵌入式单反引号的命令,请使用两个反引号作为分隔符。
【解决方案2】:

您可以使用awk 处理从find 获得的字符串

sudo find / -name artisan | awk -F 'artisan' '{print $1}'

【讨论】:

  • 我认为,特别是因为已经存在一个程序来执行此操作,引入另一个脚本环境(就像我喜欢 awk 一样)可能太多/没有必要。
  • 似乎该命令本身可以工作,但是当存储到 variable 时,它开始表现得很奇怪。 project_path=$("dirname sudo find / -name artisan")
  • 我一直收到这个错误-bash: dirname /home/forge/john/artisan: No such file or directoryi.imgur.com/CSn6rsG.png
  • @kyo 我认为您在评论错误的答案,因为我不建议您使用dirname,而是使用awk :)
  • 很抱歉,现在让我试试你的建议
【解决方案3】:

一些提示

dirname /home/forge/john/artisan
/home/forge/join

basename /home/forge/john/artisan
artisan

【讨论】:

  • 我一直收到这个错误-bash: dirname /home/forge/john/artisan: No such file or directoryi.imgur.com/CSn6rsG.png
  • 该命令不应被引用。运行echo $("echo what") echo $(echo "what") 你会看到不同。
猜你喜欢
  • 2022-01-18
  • 2017-04-03
  • 2016-01-20
  • 2014-06-06
  • 2019-10-08
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
相关资源
最近更新 更多