Localizar arquivos usando o shell script

0

Eu tenho o script abaixo que procura o arquivo no diretório atual e é avaliado como verdadeiro se o arquivo existir no diretório e é avaliado como falso se não existir

#!/bin/bash
printf "\n Please enter a file name "

read num3

if [ -f $num3 ]
then
printf "It is valid script "
else
printf "Invalid file name "
fi

Como posso verificar a presença dos arquivos em algum outro diretório em vez do diretório atual no qual o script está escrito?

    
por Rohit Saluja 02.02.2016 / 17:06

4 respostas

1

Tente isso

#!/bin/bash
printf "\n Please enter a file name "
read num3
printf "\n Please enter the path to check "
read path2check

if find $path2check -name $num3 -print -quit |
   grep -q '^'; then
  echo "the file exists!"
else
  echo "the file does not exist!"
fi
    
por 02.02.2016 / 17:19
1
[ -f $num3 ]

Não faz sentido aplicar o operador split + glob ao conteúdo de $num3 .

[ -f "$num3" ]

Verificaria se o $num3 path (absoluto se inicia com / , relativo ao diretório de trabalho atual, caso contrário) resolve para um arquivo que é do tipo regular ou um symlink para um arquivo normal.

Se você quiser verificar se $num3 relativo a um determinado diretório é um arquivo normal, use:

dir=/some/dir
[ -f "$dir/$sum3" ]

Você pode querer verificar de antemão que $sum3 não começa com / ou não contém / .

Observe que, se $dir for / , essa abordagem não funcionará em sistemas que tratam //foo/bar caminhos especialmente . Então você pode querer tratar o caso dir=/ especialmente.

case $dir in
  /) file=$dir$num3
  *) file=$dir/$num3
esac
[ -f "$file" ]

Para verificar se $num3 é um caminho relativo (para um arquivo regular ) de qualquer diretório na árvore de diretórios com raiz no diretório atual, seria melhor usar zsh :

files=(**/$num3(DN-.))
if (($#files > 0)); then
  echo "Success: $#files such file(s) found"
else
  echo Failure
fi
    
por 02.02.2016 / 17:45
0

Se você fornecer o nome do caminho para o arquivo, seu script já funcionará corretamente.

Se você não quiser fornecer um caminho, poderá verificar a presença do arquivo em outro diretório simplesmente fornecendo esse caminho em seu script

if [ -f "/other/dir/$num3" ]
then
    echo "It is valid script"
else
    echo "Invalid file name"
fi
    
por 02.02.2016 / 17:35
0

Você pode usar o comando find para pesquisar no diretório raiz e ver se o arquivo com o nome fornecido está presente ou não. Isto irá procurar através de todos os diretórios e subdiretórios direcionados a partir da raiz

! / bin / bash

printf "\ n Por favor, digite um nome de arquivo"

leia num3

if [ find / -type f -name $num3 2>/dev/null| wc -l -gt 0]; então     echo "É um script válido" outro     echo "Nome de arquivo inválido" fi

    
por 05.02.2016 / 12:57