El findcomando en Linux tiene muchas opciones en comparación con el findcomando en SunOS o Solaris.
Quiero usar el findcomando así:
find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r
Funciona perfectamente bien en una máquina Linux, pero el mismo comando no tiene la opción -printfen una máquina SunOS. Quiero personalizar mi salida en el "%TY-%Tm-%Td %f\n"formato.
Por favor, sugiera cualquier alternativa para SunOS.
shell-script
find
solaris
Pratik Mayekar
fuente
fuente

finden Solaris, instale el paquete findutils .Respuestas:
Tenga en cuenta que no tiene nada que ver con Linux; ese
-printfpredicado es específico para la implementación de GNU defind. Linux no es un sistema operativo, es solo el núcleo que se encuentra en varios sistemas operativos. Si bien la mayoría de esos sistemas operativos solían usar una tierra de usuarios de GNU en el pasado, ahora la gran mayoría de los sistemas operativos que usan Linux están integrados y tienen comandos básicos si los tienen.El
findcomando GNU , anterior a Linux, se puede instalar en la mayoría de los sistemas operativos tipo Unix. Ciertamente se usó en Solaris (llamado SunOS en aquel entonces) antes de que saliera Linux.Hoy en día, incluso está disponible como un paquete de Oracle para Solaris. En Solaris 11, eso está dentro
file/gnu-findutils, y el comando se nombragfind(para GNUfind, para distinguirlo del propiofindcomando del sistema ).Ahora, si no puede instalar paquetes, su mejor opción es usar
perl:Aquí, todavía estamos usando
find(implementación de Solaris) para encontrar los archivos, pero estamos usando su-execpredicado para pasarle la lista de archivosperl. Yperlhace unalstat()en cada uno para recuperar los metadatos del archivo (incluida la hora de modificación como el décimo elemento ($s[9])), lo interpreta en la zona horaria local (localtime()) y lo formatea (strftime()), que luego se encuentraprintjunto al nombre del archivo ($_es la variable del bucle si none se especifica enperl, y$!es el equivalente delstderror(errno)texto de error para la última falla de la llamada al sistema).fuente
lssalida de tipo, vea la especificación del modo de Lista en pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.htmlfindes-printfanterior a POSIX.2, por lo que la gente de POSIX tiene la culpa aquí. También tenga en cuenta que la especificación POSIX no era pública hasta la década de 2000. Todavía culpo a la gente de GNU por presentar sustatmás de una década más tarde con una sintaxis diferente e inferior para su especificación de formato.Otra forma de abordarlo es con el
find2perlscript, que convierte (aquí, un subconjunto) de unfindcomando en un script perl correspondiente. El script perl usa unFile::Findmódulo para hacer el trabajo pesado. Debido a que el script find2perl en mi sistema no era compatible con el-printfpredicado, lo agregué manualmente:En dos archivos de muestra que creé, el resultado es el mismo:
fuente