Tentando passar a variável gerada pelo usuário para um comando externo

0

Eu tenho um script bash que está pedindo a entrada de um usuário, então passa essa variável para um comando find. Eu tentei citar / escapar da variável de todas as maneiras que eu sei, mas continua falhando.

read -p "Please enter the directory # to check: " MYDIR
count='/usr/bin/find /path/to/$MYDIR -name *.txt -mmin -60 | wc -l'
if [ $count != 0 ]
    then 
         echo "There have been $count txt files created in $MYDIR in the last hour"
    else 
         echo "There have been no txt files created in the last hour in $MYDIR "
    fi

Ao correr, recebo isto:

Please enter the directory # to check: temp_dir

/usr/bin/find: paths must precede expression
Usage: /usr/bin/find [-H] [-L] [-P] [path...] [expression]
There have been no txt files created in the last hour in temp_dir 
    
por user66771 03.05.2014 / 15:04

1 resposta

1

Você deve citar o padrão na opção -name :

count="$(/usr/bin/find /path/to/$MYDIR -name '*.txt' -mmin -60 | wc -l)"

Se você não usar a citação, o shell expandirá o padrão. Seu comando se torna:

/usr/bin/find "/path/to/$MYDIR" -name file1.txt file2.txt ... -mmin -60 | wc -l

Você alimenta todos os arquivos cujo nome termina com a opção .txt to -name . Isso causa um erro de sintaxe.

    
por 03.05.2014 / 15:22