Infelizmente, para esta técnica, /usr/bin/test
não suporta STRING > STRING
, no entanto o shell embutido test
faz então temos que invocar o shell para poder usar find -exec
e evitar um loop:
find $PWD -type f -exec sh -c 'test "{}" "<" "$PWD/N00.P004"' \; -print
A questão permanece se a geração repetida de um shell é mais eficiente do que executar um loop. No entanto, a principal vantagem de usar essa técnica é que você pode fazer processamento recursivo sem um pipe.
Você pode criar uma função que usa essa técnica e permite usar gt
e lt
em vez de ter que passar entre <
ou >
:
my_finder () {
local op=$1
case "$op" in
"gt") op='>';;
"lt") op='<';;
*) echo "Invalid operator"; return 1;;
esac
find $PWD -type f -exec sh -c 'test "{}" "$op" "$PWD/$2"' \; -print
}
Uso:
$ my_finder gt N00.P003
/home/tzury/Desktop/sandbox/N00.P004
/home/tzury/Desktop/sandbox/N01.P000
/home/tzury/Desktop/sandbox/N01.P001
/home/tzury/Desktop/sandbox/N01.P002