2012-04-09 18 views
37

Estoy buscando un comando de Unix para imprimir los archivos con su tamaño. Usé esto pero no funcionó.Buscar archivos con tamaño en Unix

find . -size +10000k -print. 

Quiero imprimir el tamaño del archivo junto con el nombre del archivo/directorio.

+2

ese comando me da 'Encontrar: predicado desconocido '-print.'' supongo que el' .' no está realmente allí. La precisión es importante. –

+0

Stack Overflow es un sitio para preguntas de programación y desarrollo. Esta pregunta parece estar fuera de tema porque no se trata de programación o desarrollo. Consulte [Qué temas puedo preguntar aquí] (http://stackoverflow.com/help/on-topic) en el Centro de ayuda. Tal vez [Superusuario] (http://superuser.com/) o [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) sería un mejor lugar para preguntar. También vea [¿Dónde publico preguntas sobre Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

Respuesta

37
find . -size +10000k -exec ls -sd {} + 

Si su versión de find no aceptará el + notación (que actúa más bien como xargs hace), entonces es posible usar (GNU find y xargs, por lo que probablemente find apoya + de todos modos):

find . -size +10000k -print0 | xargs -0 ls -sd 

o puede reemplazar el + con \; (y vivir con la relativa ineficacia de esto), o puede vivir con problemas causados ​​por espacios en los nombres y utilizar el portátil:

find . -size +10000k -print | xargs ls -sd 

El -d de los comandos ls asegura que si un directorio es que se ha encontrado (poco probable, pero ...), entonces la información del directorio será impreso, no a los archivos en el directorio. Y, si está buscando archivos de más de 1 MB (como sugiere un comentario ahora eliminado), debe ajustar +10000k a 1000k o quizás +1024k, o +2048 (para bloques de 512 bytes, la unidad predeterminada para -size) . Esto mostrará el tamaño y luego el nombre del archivo. Puede evitar la necesidad de -d agregando -type f al comando find, por supuesto.

+0

gracias. Utilicé encontrar. -size + 300000k -print | xargs ls -sd 2>/dev/null –

3

Suponiendo que ha GNU encontrar:

find . -size +10000k -printf '%s %f\n' 

Si desea una anchura constante para el campo de tamaño, se puede hacer algo como:

find . -size +10000k -printf '%10s %f\n' 

Tenga en cuenta que -size +1000k selecciona los archivos de al menos 10.240.000 los bytes (k es 1024, no 1000). Dijiste en un comentario que quieres archivos de más de 1 millón; si eso es 1024 * 1024 bytes, entonces esta:

find . -size +1M ... 

hará el truco - excepto que también se imprimirá el tamaño y el nombre de los archivos que son exactamente 1024 * 1024 bytes. Si lo que importa, se puede utilizar:

find . -size +1048575c ... 

Es necesario decidir qué criterio simplemente desea.

+0

Necesitará una 'c' después de' + 1048575' para obtener bytes (caracteres) en lugar de los bloques predeterminados de 512 bytes. –

+0

@JonathanLeffler: ¡Reparado, gracias! –

7

Buscar se puede utilizar para imprimir el tamaño de archivo en bytes con% s como printf. % h /% f imprime el prefijo del directorio y el nombre del archivo, respectivamente. \ n fuerza una nueva línea.

Ejemplo

find . -size +10000k -printf "%h/%f,%s\n" 

salida

./DOTT/extract/DOTT/TENTACLE.001,11358470 
./DOTT/Day Of The Tentacle.nrg,297308316 
./DOTT/foo.iso,297001116 
+0

Interesante. Eso debe documentarse como una extensión de GNU (supongo) para el estándar POSIX ['find'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html). –

Cuestiones relacionadas