Question Comment puis-je trouver des fichiers plus grands ou plus petits que x octets?


Dans un terminal, comment trouver des fichiers plus grands ou plus petits que x octets?

Je suppose que je peux faire quelque chose comme

find . -exec ls -l {} \;

puis canaliser le résultat à awk pour filtrer par taille de fichier. Mais ne devrait-il pas y avoir un moyen plus facile que cela?


183
2017-10-28 23:09


origine




Réponses:


Utilisation:

find . -type f -size +4096c

pour trouver des fichiers de plus de 4096 octets.

Et :

find . -type f -size -4096c

rechercher des fichiers inférieurs à 4096 octets.

Notez la différence + et - après le changement de taille.

le -size commutateur a expliqué:

-size n[cwbkMG]

    File uses n units of space. The following suffixes can be used:

    `b'    for 512-byte blocks (this is the default if no suffix  is
                                used)

    `c'    for bytes

    `w'    for two-byte words

    `k'    for Kilobytes       (units of 1024 bytes)

    `M'    for Megabytes    (units of 1048576 bytes)

    `G'    for Gigabytes (units of 1073741824 bytes)

    The size does not count indirect blocks, but it does count
    blocks in sparse files that are not actually allocated. Bear in
    mind that the `%k' and `%b' format specifiers of -printf handle
    sparse files differently. The `b' suffix always denotes
    512-byte blocks and never 1 Kilobyte blocks, which is different
    to the behaviour of -ls.

285
2017-10-28 23:37



@Jay: De homme trouver au début de la section "Tests": "Les arguments numériques peuvent être spécifiés avec + n pour plus grand que n, -n pour moins que n, exactement pour n". - Dennis Williamson
La page de manuel le mentionne vers le haut et décrit que + et - peuvent s'appliquer à tous les commutateurs qui prennent des arguments numériques ('n'), y compris ce que signifie + et -. (Recherche de TESTS dans la page de manuel pour trouver le début de la section où cela est décrit) - Slartibartfast
Il semble que la version GNU de la page de manuel comporte la section "Tests", mais pas la version BSD. linuxmanpages.com/man1/find.1.php - Jay
La page de manuel Solaris comporte une section "Expression" qui l'explique également. docs.sun.com/app/docs/doc/816-0210/6m6nb7m9j?l=fr&a=view - Jay
Je viens de découvrir que les pages de manuel de BSD décrivent le +/-. Son chemin à la fin de la section "Primaires". - Toutes les primaires qui prennent un argument numérique permettent de précéder le nombre d'un signe plus ("+") ou d'un signe moins ("-"). Un signe plus précédent signifie "plus que n", un signe moins précédent signifie "moins que n" et aucun ne signifie "exactement n" - Jay


je pense find pourrait être utile seul sans canalisation à AWK. Par exemple,

find ~ -type f -size +2k  -exec ls -sh {} \;

Le tilde indique où vous voulez que votre recherche commence et le résultat ne devrait afficher que les fichiers de plus de 2 kilo-octets.

Pour le rendre sophistiqué, vous pouvez utiliser le -exec option pour exécuter une autre commande qui consiste à lister ces répertoires avec leurs tailles.

Pour plus d'informations, consultez le page de manuel pour find.


6
2017-10-25 22:03





AWK est vraiment très facile pour ce genre de chose. Voici quelques conseils à suivre pour vérifier la taille du fichier, comme vous l'avez demandé:

Liste des fichiers supérieurs à 200 octets:

ls -l | awk '{if ($5 > 200) print $8}'

Lister les fichiers de moins de 200 octets et écrire la liste dans un fichier:

ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog

Listez les fichiers de 0 octet, enregistrez la liste dans un fichier et supprimez les fichiers vides:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm

4
2017-10-29 00:01



analyse ls n'est pas bon - phuclv
Quelle est la différence entre la tuyauterie à tee et juste rediriger vers un fichier, comme ls -l > filelog (ou ls -l >> filelog)? - OmarOthman


Plus de 2000 octets:

du -a . | awk '$1*512 > 2000 {print $2}'

Moins de 2000 octets:

du -a . | awk '$1*512 < 2000 {print $2} '

3
2017-10-28 23:27