0 votos positivos 0 votos negativos
378 visitas
em Scripts em Bash por interessado (340 pontos)

Tenho um script.sh que recebe o seguintes argumentos:

./script.sh /home/thiago/Documentos/scripts/2021-01-08 10-21-55_10.34.4.mp4 /home/thiago/Documentos/scripts/2021-01-08 12-46-17_12.58.52.mkv /home/thiago/Documentos/scripts/3.mp4

Como é uma aplicação .desktop chamando o %F ele passa os arquivos dessa forma, não separando por "". Por conter espaço nos nome o BASH interpreta como sendo 5 parâmetros por conter espaço em branco nos nomes. Preciso que ele reconheça apenas 3 parâmetros. A quebra pode ser feita pela extensão .mp4 .mkv ou outra qualquer. Preciso que o resultado seja este:

  1. /home/thiago/Documentos/scripts/2021-01-08 10-21-55_10.34.4.mp4
  2. /home/thiago/Documentos/scripts/2021-01-08 12-46-17_12.58.52.mkv
  3. /home/thiago/Documentos/scripts/3.mp4

1 Resposta

0 votos positivos 0 votos negativos
por monitor (15,8K pontos)

A abordagem mais direta é, em vez de capturar os parâmetros com $1, utilizar o parâmetro especial @ entre aspas duplas: "$@", a menos que você pretenda passar outros argumentos na linha do comando.

O @ corresponde a todos os parâmetros passados para o script menos o nome do próprio script ($0).

Editado:

Agora que eu vi que você passa mais de um arquivo, o que não é problema. Depois de capturar todos os parâmetros como uma única string, você utiliza uma referência (/home, por exemplo), como padrão para dividir os parâmetros.

por interessado (340 pontos)
0 0
Usando isso:

 find "$@" -exec echo "{}/n" \;

obetenho isso:
find: ‘/home/thiago/Documentos/scripts/2021-01-08’: Arquivo ou diretório não encontrado
find: ‘10-21-55_10.34.4.mp4’: Arquivo ou diretório não encontrado
find: ‘/home/thiago/Documentos/scripts/2021-01-08’: Arquivo ou diretório não encontrado
find: ‘12-46-17_12.58.52.mkv’: Arquivo ou diretório não encontrado
por monitor (15,8K pontos)
0 0
Sim, porque você não tratou a string em "$@" antes do find.
por colaborador (5,1K pontos)
0 0
Talvez pouco relacionado, o `find` tem a opção `-printf "%P\n"` que mostra o caminho dos ficheiros. Experimenta!
Seja bem-vindo(a) à comunidade debxp, onde você pode fazer perguntas e receber respostas de outros membros.
Atenção pessoal, esta plataforma não é um fórum, embora se pareça muito com um. Neste tipo de ferramenta, o objetivo é fazer e responder perguntas que possam resultar em material de consulta para outras pessoas que tenham as mesmas dúvidas e dificuldades. Portanto, não há sentido em utilizarmos o Ask para socialização, para emitir opiniões pessoais ou para perguntas do tipo "quem usa isso ou aquilo". Espero que compreendam o nosso propósito. :-)
...