como posso usar 'find' para obter o caminho do ponto de partida

0

Eu uso o conEmu para ter algum tipo de terminal linux no windows.

No Windows eu configurei uma variável para abrir arquivos com sublime, e posso abrir arquivos com:

$subl path/filename

Eu tenho um virtualMachine e tenho o mesmo código, no local e no host virtual, mas os caminhos são diferentes:

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

Se eu fizer:

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

Eu recebo: /home/work/public/example.txt Mas eu não posso usá-lo para abrir com sublime:

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

Então, preciso ter apenas o caminho do ponto inicial de / home / work e ter apenas public/example.txt (or ./public/example)

E esta é a pergunta, como posso usar find para obter o caminho do ponto de partida?

    
por oootramas 12.12.2017 / 15:00

2 respostas

0

A solução foi "fácil", usando o ~ que marca o caminho para a página inicial e, em seguida, precisamos usar apenas sed para remover o texto da string.

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

$(echo ~) coloca o resultado de echo ~ que é / home / work

E precisamos usar o " em vez de ' para dizer ao linux que eles precisam procurar por variáveis na string

Eu uso + em vez de / (mais usual) para evitar o problema dos caminhos

sed 's//home/work//' cause problems
sed 's+/home/work++' doesn't
    
por 19.12.2017 / 10:20
1

Já que você disse que . está ok, você poderia apenas fazer um cd para o diretório primeiro:

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

Com o GNU find, você também pode usar o especificador de formato %P :

find somedir -printf '%P\n'  # 
(cd somedir && find . [...])
is safer if you can interpret nulls as delim

De man find :

%P: File's name with the name of the starting-point under which it was found removed.

    
por 12.12.2017 / 15:57