Como eu passo um arquivo em um caminho de string e copio esse arquivo para outro caminho na mesma linha? [fechadas]

0

Eu sou novo em escrever scripts no Linux.

Eu tenho arquivos de texto de entrada onde cada linha carrega duas seqüências de caracteres (caminhos de arquivo) separadas por um ou mais espaços em branco.

Estou escrevendo um arquivo de script automatizado que transmite o arquivo listado na primeira cadeia (caminho), copia esse arquivo para a segunda cadeia (caminho) e repita para cada linha em cada arquivo de entrada.

Eu tenho o arquivo .zip contendo todos os arquivos listados no arquivo de entrada.

Parece assim:

/path/to/file.x   /different/path/to/file.x
/path/to/file2.x  /different/path/to/file2.x

etc.

Onde file.x será passado, copiado do arquivo .zip separado para o caminho diferente.

Cada arquivo de entrada vem com seu próprio .zip, tem diferentes números de linhas e caminhos diferentes indicados.

Eu pensei em tentar executar o script:

~$ ./script.sh files.zip map.txt

escrevendo para o script:

zipfile = "$1"
map = "$2"
externalprogram "$zipfile" "$map"

while IFS='' read -r line; 
do
    VAR_STR=$line
    aLeng=${#VAR_STR[@]}
    IFS=/ read -a arr <<< "$VAR_STR"
    FILE="${arr[${aLeng}]-1}"

    cp <path to zip file>/$FILE /different/path/
done < "$map"

Obviamente, é bastante complexo e não sei como passar o segundo caminho na mesma linha que uma variável.

Qualquer entrada é apreciada. obrigado.

EDIT: eu quis colocar map.txt onde eu menciono a execução do script. Além disso, eu deveria ter dito que é bastante complexo para mim. Muita aprendizagem no Linux eu tenho que fazer ^ _ ^

    
por obidyne 08.02.2018 / 06:42

1 resposta

2

Como a sua pergunta é uma solicitação de entrada aberta, e não uma pergunta específica, aqui estão alguns comentários.

  1. Parece que você está subutilizando o comando read . Revise a documentação da página de manual e veja como você pode usá-la trivialmente para ler vários campos para variáveis exclusivas de uma só vez, por exemplo. read path1 path2 .
  2. Por que você está atribuindo VAR_STR=$line ? Parece-me que você poderia operar diretamente em $line .
  3. Seu método de cortar o caminho do segundo campo é inteligente, mas bash e a maioria dos outros shells têm um método simples, mais simples e mais eficiente, usando o # idiom para remover um padrão de prefixo de uma variável , por exemplo. %código%. Mais uma vez, veja a página man para documentação de outras coisas legais que o shell pode fazer de maneira nativa muito eficiente.
  4. Padronize sua convenção de nomenclatura pessoal para variáveis bash; ou torná-los todos em letras minúsculas ou maiúsculas, mas não misture.
  5. Sua declaração final começando com "Obviamente ..." não era óbvia para mim, pois não tenho idéia do que você quer dizer.
por 08.02.2018 / 07:25