El find
comando en Linux tiene muchas opciones en comparación con el find
comando en SunOS o Solaris.
Quiero usar el find
comando 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 -printf
en 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
find
en Solaris, instale el paquete findutils .Respuestas:
Tenga en cuenta que no tiene nada que ver con Linux; ese
-printf
predicado 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
find
comando 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 propiofind
comando 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-exec
predicado para pasarle la lista de archivosperl
. Yperl
hace 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 encuentraprint
junto 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
ls
salida de tipo, vea la especificación del modo de Lista en pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.htmlfind
es-printf
anterior 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 sustat
má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
find2perl
script, que convierte (aquí, un subconjunto) de unfind
comando en un script perl correspondiente. El script perl usa unFile::Find
módulo para hacer el trabajo pesado. Debido a que el script find2perl en mi sistema no era compatible con el-printf
predicado, lo agregué manualmente:En dos archivos de muestra que creé, el resultado es el mismo:
fuente