2012-05-13 13 views
19

Lo que he probado hasta ahora ...Linux comando find, encontrar 10 últimos archivos de forma recursiva independientemente del lapso de tiempo

Comando:

find . -type f -ctime -3 | tail -n 5 

Resultado:

./Mobilni Telefoni/01. Box Update/05. DC Unlocker Client/dc-unlocker_client-1.00.0857.exe 
./Mobilni Telefoni/01. Box Update/39. Z3X Box/01. Update/01. Samsung Box/SamsungTool_12.4.exe 
./Mobilni Telefoni/10. Nokia/1. SRPSKI HRVATSKI JEZICI/BB5/3xx_Series/Asha 300/06.97/rm781_06.97_ppm_d.rar 
./GPS Navigacije/01. Garmin/03. Garmin Other/garmin_kgen_15.exe 
./GPS Navigacije/01. Garmin/03. Garmin Other/test.txt 

Esta salida es OK, no funciona bien si pongo un lapso de tiempo más amplio. (aviso que uso -time y no -mtime porque algunos archivos cargados se han modificado hace unos años)

El problema es que los archivos se pueden cargar una vez al mes o una vez al año, y aún necesito obtener 10 archivos más recientes , independientemente del lapso de tiempo.

Si no se puede hacer, ¿tail solo limita la salida, o de alguna manera solo obtiene el número especificado sin un gran impacto en el rendimiento en una gran cantidad de archivos.

Mediante el uso de comandos de una respuesta en SO, que fue capaz de obtener los archivos, pero algunos archivos habían desaparecido ...

find . -type f -printf '%[email protected] %p\n' | sort -n | tail -10 | cut -f2- -d" " 

Resultado:

./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2330/E2330_OXFKE2.rar 
./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2330/FlashTool_E2_R6.zip 
./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E210/E210_XFGH2.rar 
./Mobilni Telefoni/05. iPhone/07. iFaith/iFaith-v1.4.1_windows-final.zip 
./Mobilni Telefoni/05. iPhone/09. iPhone Browser/SetupiPhoneBrowser.1.93.exe 
./Mobilni Telefoni/05. iPhone/10. iPhone_PC_Suite/iPhone_PC_Suite_Eng_v0.2.1.rar 
./Mobilni Telefoni/05. iPhone/10. iPhone_PC_Suite/iPhone_PC_Suite_Ok.rar 
./test 
./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2152/E2152_XXJH4_OXFJI2.zip.filepart 
./GPS Navigacije/01. Garmin/03. Garmin Other/test.txt 

Archivo garmin_kgen_15.exe falta porque fue creado en 2008, pero fue cargado en las últimas 24 horas.

+0

¿Qué hora del archivo hace que desea utilizar como clave en la clase? ctime/mtime/smth else? Puede consultar la página 'man' de find para encontrar el'% XX' correcto en lugar de '% T @' – osgx

+0

@osgx ctime (?), Los archivos se cargan a través de FTP ... lo hará. –

+2

¿Has probado con '% C @'? - 'encontrar. -type f -ctime -3 -printf "% C @% p \ n" | ordenar | cola -n 5 | sed 's/[^] * \ (. * \)/\ 1 /' ' – hakre

Respuesta

36

me dijeron que esta es la solución:

find . -type f -printf "%[email protected] %p\n" | sort -rn | head -n 10 

El punto clave es el marcador de posición printf %[email protected], que es el -ctime uno. Lo encontré leyendo man find.

Resultado:

1336992789.0000000000 ./Mobilni Telefoni/05. iPhone/03. iPhone 4G Firmware/5.1.1/iPhone3,1_5.1.1_9B206_Restore.ipsw.filepart 
1336928538.0000000000 ./GPS Navigacije/01. Garmin/03. Garmin Other/test.txt 
1336922295.0000000000 ./GPS Navigacije/01. Garmin/03. Garmin Other/garmin_kgen_15.exe 
1336868365.0000000000 ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2152/E2152_XXJH4_OXFJI2.zip.filepart 
1336867426.0000000000 ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E210/E210_XFGH2.rar 
1336866301.0000000000 ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2330/FlashTool_E2_R6.zip 
1336865921.0000000000 ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2330/E2330_OXFKE2.rar 
1336865409.0000000000 ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2230/E2230_XXKC1_CDS.zip 
1336865398.0000000000 ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2230/E2230_XXKC1_BIN.zip 
1336864949.0000000000 ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2230/E2230_OXFKC1_CSC.zip 
+0

Olvidaste -n ordenar. Debería ser: encontrar. -type f -printf "% C @% p \ n" | ordenar -rn | head -n 10 – qwertzguy

+0

¿Sabes cuál es el modo de clasificación predeterminado para ordenar? '-n' suena bien, aunque – hakre

+0

es alfabético, pero depende de la configuración regional: http://unix.stackexchange.com/questions/43465/whats-the-default-order-of-linux-sort – qwertzguy

-3

más fácil:

filename=$(ls -t . | head -10) 
+1

esto no es una solución recursiva; solo encontrará los archivos en el directorio actual, no en los subdirectorios. –

Cuestiones relacionadas