web-dev-qa-db-fra.com

Lister les fichiers d'une taille spécifique dans le répertoire actuel et tous les sous-répertoires

Comment puis-je afficher tous les fichiers supérieurs à 10 000 octets dans mon répertoire actuel et ses sous-répertoires.

A tenté ls -size +10k mais cela n'a pas fonctionné.

37
eveo

find . -size +10k -exec ls -lh {} \+

la première partie de ceci est identique à la réponse @sputnicks, et trouve avec succès tous les fichiers dans le répertoire sur 10k (ne confondez pas k avec K), mon ajout, la deuxième partie exécute alors ls -lh ou ls qui répertorie (-l) les fichiers par taille lisible par l'homme (-h). annuler le h si vous préférez. bien sûr, le {} est le fichier lui-même, et le \+ est simplement une alternative à \;

qui en pratique \; répéterait ou:

ls -l found.file; ls -l found.file.2; ls -l found.file.3

\+ l'afficher comme une seule instruction ou:

ls -l found.file found.file.2 found.file.3

plus sur \; vs + avec find

De plus, vous voudrez peut-être que la liste soit classée par taille. Ce qui est relativement facile à réaliser. Je voudrais au -s option pour ls, donc ls -ls puis le diriger vers sort -n pour trier numériquement

qui deviendrait:

find . -size +10k -exec ls -ls {} \+ | sort -n

ou dans l'ordre inverse, ajoutez un -r:

find . -size +10k -exec ls -ls {} \+ | sort -nr

enfin, votre titre indique trouver le plus gros fichier du répertoire. Vous pouvez le faire en redirigeant ensuite le code vers tail

find . -size +10k -exec ls -ls {} \+ | sort -n | tail -1 vous trouverait le plus gros fichier du répertoire et de ses sous-répertoires.

notez que vous pouvez également trier les fichiers par taille en utilisant -S, et annuler la nécessité d'un tri. mais pour trouver le plus gros fichier, vous devez utiliser la tête afin

find . -size +10k -exec ls -lS {} \+ | head -1

l'avantage de le faire avec -S et non sort en est un, vous n'avez pas besoin de taper sort -n et deux, vous pouvez également utiliser -h l'option de taille lisible par l'homme. qui est l'un de mes préférés à utiliser, mais n'est pas disponible avec les anciennes versions de ls, par exemple, nous avons un ancien serveur centOs 4 au travail qui n'a pas -h

69
matchew

Essayez de faire ceci:

find . -size +10k -ls

Et si vous voulez utiliser le binaire ls:

find . -size +10k -exec ls -l {} \;
11
Gilles Quenot

Je me rends compte que la mission est probablement terminée depuis longtemps. Pour quelqu'un d'autre:

Vous êtes trop compliqué.

find . -size +10k
8
UnixMakesMeSad

Je vais ajouter à la réponse @matchew (pas assez de points de karma pour commenter):

find . -size +10k -type f -maxdepth 1 -exec ls -lh {} \; > myLogFile.txt

-type f: spécifiez le type de fichier normal

-maxdepth 1: assurez-vous qu'il ne trouve que les fichiers dans le répertoire courant

4
holychiz

Vous pouvez utiliser ls comme ça:

ls -lR | egrep -v '^d' | awk '$5>10240{print}'

Explication:

ls -lR         # list recursivly
egrep -v '^d'  # only print lines which do not start with a 'd'. (files)

imprimer uniquement les lignes où la cinquième colonne (taille) est supérieure à 10240 octets:

awk '$5>10240{print}'
1
jens-na