Como fazer arquivo de suporte a script: /// notação?

5

Quando copio qualquer arquivo e o colo no console ou edito de texto, ele é passado como

  

file: /// home / usuário / caminho / arquivo

quando eu passo para o script não é encontrado

Qual é a maneira mais fácil de converter isso para o caminho normal do Linux ou de alguma forma fazer o script suportá-lo?

por exemplo

  

arquivo cat: /// home / user / path / file

diz

  

Nenhum arquivo ou diretório desse tipo

    
por UAdapter 02.11.2011 / 13:57

5 respostas

0

Para remover o prefixo file:// do URL, você pode usar sed :

echo "file:///home/user/path/file" | sed "s/^file:\/\///g"

O que isso faz:

  • Exibe o URL para a saída padrão (para que possa ser modificado com sed)
  • Substitui todas as ocorrências de file:// em qualquer linha que comece com file:// sem nada. Isso efetivamente remove file:// do URL, deixando apenas /home/user/path/file

Para usar isso em um script, você pode tentar o seguinte:

cat $(echo "file:///home/user/path/file" | sed "s/^file:\/\///g")

Agora, a mensagem de erro é:

cat: /home/user/path/file: No such file or directory

(Por favor, note que se refere ao nome do arquivo correto em vez do URL.)

Seria muito mais limpo armazenar o nome do arquivo convertido em uma variável do shell e usá-lo posteriormente.

MYFILE=$(echo "file:///home/user/path/file" | sed "s/^file:\/\///g")
cat $MYFILE
    
por lgarzo 02.11.2011 / 14:24
6

Não conheço nenhum comando que converta entre urls de arquivo e caminhos de arquivo, mas você pode converter com python ou qualquer outro idioma com ligações ao gio. Por exemplo:

$ python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' file:///home/user/path/file%20with%20spaces
/home/user/path/file with spaces
    
por geirha 06.11.2011 / 23:13
0

Eu acredito que você pode fazer isso é bash em si. Tente o seguinte

echo "file:///home/user/path/file" | cut -d'/' -f3-
/home/user/path/file

Delimitará até o arquivo: // e o restante será ecoado no terminal.

    
por Saran Krishnan 01.08.2013 / 19:32
0

Você pode usar isso, supondo que file_path contenha o caminho:

#!/bin/bash

file_path='file:///home/me/Desktop/path test'

file_path="${file_path#file://}"

echo "${file_path}"

que imprime /home/me/Desktop/path test . Isso permite que ele funcione com ou sem file:// , usando apenas manipulação de string Bash.

Você pode adicionar isso a uma função (em .bashrc ) para facilidade de uso:

Função:

norm_path() {
    echo "${@#file://}"
}

Uso:

cat "$(norm_path file:///home/user/path/file)"
    
por kiri 10.01.2014 / 22:22
0

Você também pode usar urlencode ( sudo apt-get gridsite-clients ):

$ echo "$(urlencode -d "file:///folder/with%20spaces")"
file:///folder/with spaces
$ echo "$(urlencode -d "file:///folder/with%20spaces"|cut -c 8-)"
/folder/with spaces

Se você não precisa de suporte hexadecimal, pode usar apenas cut -c 8- . Alternativamente, você poderia usar o urlencode com qualquer outro método de remover o file:// (sed, expansão de chaves, etc.)

    
por wroth 25.08.2016 / 16:41

Tags