我使用 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