如何使用“find”来获取从起点开始的路径

如何使用“find”来获取从起点开始的路径

我使用 conEmu 在 Windows 中拥有某种 Linux 终端。

在Windows中,我配置了一个变量来使用sublime打开文件,我可以使用以下命令打开文件:

$subl path/filename

我有一个虚拟机,并且在本地和虚拟主机中都有相同的代码,但路径不同:

D:\work (in win)
/home/work/ (in the server)

如果我做:

$ ssh [email protected] 'find . -type f -name example.txt'

我明白了:/home/work/public/example.txt 但我不能用它来用 sublime 打开:

subl $(ssh [email protected] 'find /home/work -type f -name example.txt') //doesn't work

所以我只需要从 /home/work 起点开始的路径,并且只需要public/example.txt (or ./public/example)

这就是问题,我如何使用find从起点获取路径?

答案1

既然你说.没问题,你可以先 cd 到该目录:

(cd somedir && find . [...])

通过 GNU find,您还可以使用%P格式说明符:

find somedir -printf '%P\n'  # \0 is safer if you can interpret nulls as delim

man find

%P:文件名以及发现该文件的起始点的名称已被删除。

答案2

解决方案很“简单”,使用~标记到家的路径,然后我们只需要使用 来sed从字符串中删除文本。

find . -type f -name file | sed "s+$(echo ~)++"

$(echo ~)结果echo ~就是 /home/work

我们需要使用 the"而不是'告诉 linux 他们需要在字符串中查找变量

我使用 + 而不是 / (更常用)来避免路径问题

sed 's//home/work//' cause problems
sed 's+/home/work++' doesn't

相关内容