Comment puis-je répertorier uniquement les fichiers non vides à l'aide de ls?


Réponses:


49

J'utiliserais find dirname -not -empty -ls, en supposant que GNU trouve.


1
Quelqu'un veut-il expliquer le downvote?
Daenyth

Probablement parce que le demandeur a demandé lset que vous avez utilisé find;) J'ai augmenté cependant ... C'est une bonne solution
BloodPhilia

2
Si vous utilisez "find. -Not -empty -ls", il inclura également le répertoire courant (c'est-à-dire "." Dans sa sortie), pour simplement inclure les fichiers actuels, utilisez "find. -Type f -not -empty -ls"
user672009

19

C'est un travail pour trouver que ls n'est pas assez puissant.

find -maxdepth 1 -size +0 -print

-maxdepth 1 - cela indique à find de rechercher le répertoire actuel uniquement, de supprimer pour rechercher dans tous les sous-répertoires ou de changer le nombre pour descendre de 2, 3 niveaux ou plus.

-size +0cela indique à find de rechercher des fichiers dont la taille est supérieure à 0octets. 0peut être changé en n'importe quelle taille que vous souhaitez.

-print indique à find d'imprimer le chemin complet du fichier qu'il trouve

Edit:
ajout tardif: vous devriez probablement également ajouter le -type fcommutateur ci-dessus. Cela indique à find de ne rechercher que les fichiers. Et comme indiqué dans les commentaires ci-dessous, le -printcommutateur n'est pas vraiment nécessaire.


1
Pour éviter un avertissement, vous devez placer -maxdepth 1avant -size +0. Est également -printl'action par défaut, donc elle n'est pas nécessaire.
cYrus

@cYrus - Aucun avertissement pour moi (cygwin)
Nifle

Les implémentations de findvarient considérablement en termes de ce que sont les options valides et où elles peuvent aller. GNU find(qui est terriblement commun) va produire un avertissement si vous mettez -sizeavant -maxdepth.
Télémaque


8
ls -l | awk '{if ($5 != 0) print $9}'

Si vous avez l'intention d'utiliser ls, vous avez besoin d'un peu d'aide awk.


7

Ls n'a presque aucune option pour filtrer les fichiers: ce n'est pas son travail. Le filtrage des fichiers est le travail du shell pour les cas simples (par globbing) et le travail de recherche pour les cas complexes.

Dans zsh, vous pouvez le Lqualificatif globbing pour conserver uniquement les fichiers dont la taille est> 0 (le .qualificatif se limite aux fichiers normaux):

ls *(.L+0)

Les utilisateurs d'autres shells doivent utiliser find. Avec GNU find (comme on le trouve principalement sur Linux):

find -maxdepth 1 -type f ! -empty -exec ls {} +

Une manière conforme POSIX est:

find . -type f -size +0c -exec ls {} + -o -name . -o -prune

Si lsétait non seulement un exemple et vous simplement l' intention inspection visuelle, vous pourriez trier par taille: ls -S.


3
 $ find /* -type f ! -size 0

fonctionnera mieux si vous voulez tous les fichiers non vides, plutôt que seulement les répertoires.


1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.