El comando no funciona porque findinvoca una nueva tarinstancia para cada archivo que encuentra, y cada tarinstancia sobrescribe el archivo de archivo con uno nuevo que contiene solo el archivo que le proporcionó find. Lo que desea es findarmar una lista completa de todos los archivos, luego pasar esa lista a una sola tar:
find /u01/oracle/files -mtime +30 -print0 | tar -czvf filename_$(date +%Y-%m-%d).tar.gz --null -T /dev/stdin
Si su versión de lo taradmite, agregue el --remove-filesindicador para eliminar los archivos de origen que se comprimieron correctamente.
Si tarno admite este indicador, puede utilizar este script en su lugar:
#!/bin/bash -e
filelist="$(mktemp)"
find /u01/oracle/files -mtime +30 -print0 > "$filelist"
tar -czvf "filename_$(date +%Y-%m-%d).tar.gz" --null -T "$filelist"
xargs -0 rm < "$filelist"
rm "$filelist"
El uso de un archivo temporal para almacenar la lista en lugar de regenerarlo evita una condición en la que un archivo podría no considerarse lo suficientemente antiguo para el tarcomando, pero para cuando se creó el archivo, el tiempo ha pasado y coinciden más archivos.
Asegúrese de incluir el -een el shebang (primera línea). Si lo omite, bash ignorará los errores de los comandos que ejecuta, lo que podría conducir a la pérdida de datos.