web-dev-qa-db-fra.com

Comment trouver tous les fichiers et dossiers vides dans un répertoire spécifique, y compris les fichiers qui semblent vides mais ne le sont pas?

Supposons que, dans mon dossier ~/list, j'ai une grande quantité de dossiers, chacun avec ses propres sous-dossiers et sous-sous-dossiers, etc., et qu'il y a beaucoup de fichiers presque à chaque niveau. Cependant, certains de ces fichiers et dossiers sont vides. Comment puis-je les rechercher tous récursivement pour trouver les fichiers et dossiers vides? Et ensuite, affichez-les dans une liste d'emplacements de fichiers afin que je sache où se trouve chacun d'entre eux (vous devez également indiquer clairement qui est un fichier et un dossier, car tous les fichiers ne possèdent pas d'extensions de fichier). J'utilise Ubuntu GNOME 15.10 avec GNOME 3.18.

Veuillez noter qu'il serait également très utile de me dire également si un fichier a l'air vide mais ne l'est pas (par exemple, s'il contient des espaces ou des sauts de ligne). Et ferait la différence entre un fichier vide réel et un fichier vide dans la sortie.

17
user364819

De man find

    -empty File is empty and is either a regular file or a directory.

Donc, pour trouver à la fois des fichiers vides et des répertoires, il suffit de faire

find ~/lists -empty

Pour indiquer le type, vous pouvez utiliser le spécificateur de format de sortie %y

          %y     File's type (like in ls -l), U=unknown type (shouldn't happen)

par exemple.

find ~/lists -empty -printf '%y %p\n'

ou utilisez un programme externe comme ls, qui inclut une option --classify

    -F, --classify
          append indicator (one of */=>@|) to entries

c'est à dire.

find ~/lists -empty -exec ls -Fd {} \;

Si votre définition de "vide" est élargie pour inclure des fichiers ne contenant que des caractères d'espacement, elle devient alors plus compliquée et plus longue en calcul, car vous devez maintenant ouvrir au moins tous les fichiers non vides et en examiner le contenu. Le moyen le plus efficace auquel je puisse penser sans réfléchir serait quelque chose comme:

find ~/list \( -empty -o \( -type f -a ! -exec grep -qm1 '[^[:blank:]]' {} \; \) \) -exec ls -Fd {} \;

(soit vide, OR un fichier ET grep ne détecte pas au moins un caractère non vide). Probablement il y a un meilleur moyen cependant.

25
steeldriver

Depuis le dossier ~/list:

find . -empty -type d

pour lister les répertoires vides et

find . -empty -type f

pour lister les fichiers vides.

find . -type f -exec bash -c 'if [ `cat "{}" |wc -w` -eq 0 ]; then echo "file - {}";fi' \; -or -empty -exec bash -c "echo dir - {}" \; 

pour lister les dossiers et fichiers vides, y compris les espaces et les lignes vides

10
EdiD