C Shell: ações diferentes dependendo do tipo de arquivo

1

Sou muito novo na C Shell. Eu estou tentando ler um arquivo da linha de comando e determinar se é um arquivo zip, um .txt, um link symbloic, um pipe ou qualquer outra coisa ("desconhecido").

Depois, gostaria de executar algumas instruções dependendo do tipo. Por exemplo, se for um arquivo txt, imprima informações sobre ele ("é um arquivo de texto") e dê seu tamanho.

Aqui está o que eu cheguei até agora:

!/bin/csh

if ( "echo ${1} | cut -d'.' -f2" == "zip" ) then
    echo $1 is a zip file
else
    echo sorry, $1 is not a zip file
endif
    
por Jack P 05.11.2014 / 19:59

2 respostas

0

Use backticks para avaliar o resultado do comando dentro, isto é o mesmo que outros shells. Então, ao invés de

"echo ${1} | cut -d'.' -f2"

que é uma string que certamente não é igual à string "zip", use

'echo ${1} | cut -d'.' -f2'

que avalia o comando dentro e retorna o resultado.

    
por 05.11.2014 / 20:56
0

Use switch para analisar o nome do arquivo.

switch ($1)
case *.zip:
  echo "$1 is a zip file"
  breaksw
default:
  echo "${1}: not supported"
endsw

Para analisar o tipo de arquivo, analise a saída de ls : o primeiro caractere é o tipo de arquivo.

switch ("'ls -logd "$1"'")
case d*:
  echo "$1 is a directory"
  breaksw
# ...
endsw

Na verdade, você provavelmente está procurando o comando file , que analisa o conteúdo do arquivo para determinar qual formato de dados contém (e relata o tipo de arquivo para arquivos não regulares).

file -- "$1"
    
por 07.11.2014 / 04:54