Verifique se há arquivos específicos dentro de um diretório [duplicado]

0

Eu quero verificar o diretório 1 8 e 4 presente dentro de uma lista de diretório pai que é passado como argumento para o script. PFB meu script

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do

cd $line
echo "checking in $line" >> ../filesearch.log

if [ [ -d 1]  &&  [ -d 8]  &&  [ -d 4] ]; then
echo "1 8 4 exists" >> ../filesearch.log
else
    echo "Dir 1 8 4 does not exist" >> ../filesearch.log
fi
cd ../

done < "$1"

Estou recebendo o erro abaixo quando uso se [[-d 1] & & [-d 8] & & [-d 4]];

 ./fs.sh: line 8: [: -d: binary operator expected

se usarmos [[-d 1]]; em vez de se [[-d 1] & & [-d 8] & & [-d4]]; meu código está funcionando bem, mas minha exigência é verificar se todos os arquivos mencionados acima (1 4 8) estão presentes no diretório pai ou não.

    
por Ebison J 04.10.2018 / 21:27

3 respostas

0

Faça assim if [ -d 1 ] && [ -d 8 ] && [ -d 4 ]

    
por 04.10.2018 / 21:36
0

Tente isso,

if [[ -d 1 && -d 8 && -d 4 ]];
    
por 04.10.2018 / 21:54
0

Seu problema subjacente aqui é que você assume que [ é exatamente o mesmo tipo de parênteses e que você pode aninhá-los. Isso não é verdade. A expressão [ ... ] é igual a test ... .

O utilitário test tem a possibilidade de combinar vários testes com -a para and e com -o para or . Veja o manual para detalhes.

Assim, você pode escrever seu cheque como test -d 1 -a d 4 -a -d 8 ou [ -d 1 -a d 4 -a -d 8 ]

    
por 04.10.2018 / 22:40