¿Cómo mostrar solo el tercer partido de la statement Find?

Ninguna de las respuestas que he visto funciona para mí, tengo un código como este

OLDVER=`readlink current` OLDDATA=`find ! -newer $OLDVER 

Y quiero get solo el tercer partido de la instrucción FIND, porque necesito este file de nombre para mi secuencia de commands.

Si sabe que los nombres de sus files no contienen caracteres de nueva línea, entonces los siguientes commands funcionarán:

Extraiga el 3er resultado de find usando head y tail :

 find <PATH> <EXPRESSION> | head -n 3 | tail -n 1 

Extrae el 3er resultado de find usando sed :

 find <PATH> <EXPRESSION> | sed '3q;d' 

Extraiga el 3er resultado de find usando awk :

 find <PATH> <EXPRESSION> | awk 'NR==3{print;exit}' 

Esto es lo que podría parecer con los commands en su publicación:

 find ! -newer "$(readlink current)" | sed '3q;d' 

Si desea manejar files cuyos nombres podrían contener líneas nuevas, entonces podría usar la opción -print0 y recorrer los resultados, por ejemplo, algo como lo siguiente:

 find . -print0 | (\ IFS=$'\0' \ n=0; \ while read -r -d '' line; do \ ((n++)); if [[ $n -eq 3 ]]; then \ echo "${line}"; \ break; \ fi; \ done) 

Para verificar que esto funcione, podrías realizar algo como el siguiente experimento:

 mkdir /tmp/test cd /tmp/test touch $'file1 line1\012file1 line2' touch $'file2 line1\012file2 line2' touch $'file3 line1\012file3 line2' find . -print0 | (\ n=0; \ while read -r -d '' line; do \ ((n++)); if [[ $n -eq 3 ]]; then \ echo "${line}"; \ break; \ fi; \ done) 

Esto produce el siguiente resultado (como se esperaba):

 ./file3 line1 file3 line2