Comment puis-je lister (en utilisant ls
) tous les fichiers qui ne sont pas vides (taille> 0) en utilisant linux?
J'utiliserais find dirname -not -empty -ls
, en supposant que GNU find.
C'est un travail pour trouver ls n'est pas assez puissant.
find -maxdepth 1 -size +0 -print
-maxdepth 1
- ceci indique à find de ne rechercher que le répertoire en cours, de supprimer pour rechercher dans tous les sous-répertoires ou de changer le numéro pour descendre de 2, 3 niveaux ou plus.
-size +0
ceci indique à find de rechercher des fichiers dont la taille est supérieure à 0
octets. 0
peut être changé à n'importe quelle taille que vous voudriez.
-print
indique à find d'imprimer le chemin complet du fichier trouvé
Modifier:
Ajout tardif: vous devriez probablement également ajouter le commutateur -type f
ci-dessus. Cela indique à find de ne trouver que des fichiers. Et comme indiqué dans les commentaires ci-dessous, le commutateur -print
n'est pas vraiment nécessaire.
find dirname -type f ! -empty
Ls n'a presque aucune option pour filtrer les fichiers: ce n'est pas son travail. Le filtrage de fichiers est la tâche du shell pour les cas simples (via la segmentation) et celui de la recherche de cas complexes.
Dans zsh, vous pouvez utiliser le qualificatif L
globbing pour ne conserver que les fichiers dont la taille est> 0 (le qualificatif .
se limite aux fichiers normaux):
ls *(.L+0)
Les utilisateurs d'autres coques doivent utiliser find. Avec GNU find (trouvé principalement sous Linux):
find -maxdepth 1 -type f ! -empty -exec ls {} +
Une méthode conforme à POSIX est:
find . -type f -size +0c -exec ls {} + -o -name . -o -Prune
Si ls
n'était pas qu'un exemple et que vous souhaitiez simplement une inspection visuelle, vous pouvez trier par taille: ls -S
.
ls -l | awk '{if ($5 != 0) print $9}'
Si vous souhaitez utiliser ls
, vous avez besoin de l'aide de awk
.
$ find /* -type f ! -size 0
fonctionnera mieux si vous voulez tous les fichiers non vides, plutôt que juste des répertoires.
Bash 4.0+
shopt -s globstar
shopt -s nullglob
for file in **/*; do test -f "$file" && [[ -s "$file" ]] && echo "$file"; done