Dal*_*ale 4 command-line cygwin cd-command
转到包含特定文件的目录的最佳方法是什么?(假设我们从我们希望搜索的根开始)。我正在使用 Cygwin。
解决方案:我的最终解决方案是将其放入我的 .bashrc 文件中。
jump2_func() {
cd "$(find . -name $1 -printf %h -quit 2>/dev/null)"
}
alias jump2=jump2_func
Run Code Online (Sandbox Code Playgroud)
两部分:查找文件和切换到找到文件的目录。
如果您想在系统的文件层次结构中的某个位置找到某个文件的名称,那么您会立即想到两种方法:
find.locate.使用find以下命令定位文件:
$ find / -type f -name "filename" -print
Run Code Online (Sandbox Code Playgroud)
这将从根 ( /) 向下遍历整个文件系统,并打印出所有名为filename. 更改/为您要搜索的任何目录路径。
使用locate以下命令查找文件:
$ locate -r -b '^filename$'
Run Code Online (Sandbox Code Playgroud)
这将输出名称为 的所有文件(和目录等)的所有路径filename。这通常是多少比使用更快find。我在-r这里使用正则表达式来匹配完整的文件名,否则您可能会得到匹配,例如file3搜索file. 该-b选项locate仅匹配路径的“基本名称”,即每个路径末尾的实际文件名。
为了能够locate在 Cygwin上使用,您首先必须初始化“locate数据库”。你通过运行来做到这一点
$ updatedb
Run Code Online (Sandbox Code Playgroud)
缺点locate是它只知道updatedb运行时存在的文件的位置。这就是为什么大多数 Unix 系统locate通常定期运行updatedb(或等效命令) using cron(我认为在 Cygwin 中不可用);在某些 Linux 上每天一次,或者在 OpenBSD 上默认每周一次。
由于这两种方法都不能保证只返回一个文件路径,因此很难想出一种可靠的方法将工作目录更改为找到的文件的目录(如果有很多,选择哪个?)。
假设您想选择第一个结果:
cd "$( dirname "$(somecommand | head -n 1)" )"
Run Code Online (Sandbox Code Playgroud)
这里somecommand是find或locate如上。
head -n 1将从列表中挑选出第一个结果,并dirname仅提取包含该文件的目录的路径。 cd然后将工作目录更改为该目录。
请注意,如果您使用locate,则匹配项还可能包含非常规文件(例如目录)的名称。
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |