Você citou problemas.
Dica: coloque um echo
na frente da linha de comando para ver o que realmente está expandindo. Ainda mais explícito, para mostrar exatamente onde cada argumento é separado, coloque python -c "import sys; print sys.argv[1:]"
na frente da linha de comando.
python -c "import sys; print sys.argv[1:]" \
find $FILE_DIR -name "*.*" "${exc_lst}" -type f -mtime +20 -user sh79790 -ls
saídas:
['find', '-name', '*.*', '! -path "/var/app/s2/pnl/incoming/recondata/*.*"', '-type', 'f', '-mtime', '+20', '-user', 'sh79790', '-ls']
Como você pode ver, ! -path "/var/app/s2/pnl/incoming/recondata/*.*"
é fornecido como um único argumento grande com espaços e aspas dentro dele. Isso é o que você pede quando você cita ${exc_lst}"
: não se expanda. find
não reconhece isso. Ele precisa de !
, -path
e o caminho como argumentos separados.
Agora:
echo find $FILE_DIR -name "*.*" ${exc_lst} -type f -mtime +20 -user sh79790 -ls
saídas:
find -name *.* ! -path "/var/app/s2/pnl/incoming/recondata/*.*" -type f -mtime +20 -user sh79790 -ls
Como você pode ver, existem caracteres de aspas duplas literais em torno do nome do caminho. Vai excluir um caminho que literalmente contenha essas citações, o que não ocorrerá.
Tente definir exc_lst
sem as citações:
export exc_lst='! -path /var/app/s2/pnl/incoming/recondata/*.*'
e, em seguida, usando seu segundo formulário:
find $FILE_DIR -name "*.*" ${exc_lst} -type f -mtime +20 -user sh79790 -ls
Felizmente, o caminho a excluir não contém espaços. Se assim fosse, você teria muito mais dificuldade em realizar isso.
Nota: Toda a minha amostra de amostra está faltando o primeiro argumento para find
porque $FILE_DIR
não está definido no meu shell (você não especificou seu valor), mas se ele estivesse definido, ele estaria lá.