Apenas:
find '/shrproj/' -type f -name '*.sas' \
-exec grep -iq 'DB2' {} \; \
-exec grep -ie DSN= -e DATASRC= {} \; \
-ls
Estou usando o comando para procurar por arquivos que aparecem em um determinado diretório no Unix, arquivos que terminam *.sas
e que contenham a string DB2
. Então eu quero procurar o conjunto de arquivos resultante para as Strings DSN=
ou DATASRC=
e também imprimir a linha contendo essas strings. Então, este é o comando FInd que estou usando:
find '/shrproj/' -type f -name '*.sas' -exec grep -il 'DB2' {} \; 2> /dev/null | xargs egrep -Ri 'DSN=|DATASRC='
Isso me dá a saída desejada:
/shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas: ,"DSN=%UPCASE(&the_database.)"
/shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas: ,"DSN=%UPCASE(&the_database.)"
Mas agora eu também quero imprimir as propriedades do arquivo (usando a opção -ls) seguindo o resultado acima, ou seja, o abaixo é o que pretendo alcançar:
/shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas: ,"DSN=%UPCASE(&the_database.)"
/shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas: ,"DSN=%UPCASE(&the_database.)"
61522 19 -rwxrwsr-x 1 sas sas 18546 Jun 2 2010 /shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas
As propriedades do arquivo na última linha acima são as mesmas ao usar o comando find com a opção -ls.
find /shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas -ls
Então, como eu faço isso para cada arquivo usando o primeiro comando Find que estou usando acima?
Por favor me avise. Obrigado.
Apenas:
find '/shrproj/' -type f -name '*.sas' \
-exec grep -iq 'DB2' {} \; \
-exec grep -ie DSN= -e DATASRC= {} \; \
-ls
Eu sugeriria algo ao longo das linhas deste (não posso fazer tudo em um one-liner); -)
OLDIFS="$IFS"
IFS=$'\n'
for i in $(find '/shrproj/' -type f -name '*.sas'); do
G1="$(grep -il 'DB2' "$i")"
if [ -n "$G1" ]; then
G2="$(egrep -Ri 'DSN=|DATASRC=' "$i")"
if [ -n "$G2" ]; then
echo "$G1"
echo "$G2"
ls -l "$i"
fi
fi
done
IFS="$OLDIFS"