Copie e cole seu script do comentário acima com quebras de linha adicionadas nos sinais ;
para legibilidade:
!/bin/bash
printf "%s\n" "Please enter full path to the vmfile location e.g. /path/to - "
read
vmfile_path=$REPLY
cd $vmfile_path
7za e -y ls -a | grep 001 -o'pwd'
-
Para começar, a primeira linha deve ser
#!/bin/bash
, mas acho que é um erro de digitação. -
Seu comando
read
e a linha subsequente são mais fáceis de serem gravados como apenasread vmfile_path
. Dessa forma, o shebang também pode ser alterado para#!/bin/sh
, já que você não estará usando nenhuma função específica do Bash. -
Você deve citar o argumento
cd
para manipular nomes de diretório com espaços. -
Eu suponho que você queira extrair um arquivo cujo nome contenha a string
001
na última linha. No momento está faltando alguma substituição de processo, e sua intenção provavelmente está mais próxima de:7za e -y $(ls -a | grep 001) -o$(pwd)
A sintaxe
$()
é mais fácil de ler (e tem outras vantagens) em comparação com os backticks, mas faz a mesma coisa.Eu também acho que o diretório de saída é padronizado como
pwd
output, o que o torna supérfluo, mas não tenho certeza. -
Seu comando não vai gostar se houver mais de um nome de arquivo correspondente a
001
.
Ignorando o último problema, você deseja no total algo como:
#!/bin/sh
printf '%s\n' "Please enter full path to the vmfile location e.g. /path/to - "
read vmfile_path
cd "$vmfile_path"
7za e -y "$(ls -a | grep 001)" -o"$(pwd)"
Ou, mais simples, substitua as duas últimas linhas por (também lida com várias correspondências) (embora não tenha sido testado):
find "$vmfile_path" -maxdepth 1 -name '*001*' -exec 7za e -y -o"$vmfile_path" {} \;
O padrão de correspondência de nomes provavelmente poderia ser melhorado se você conhecer mais o nome do arquivo.