Comment puis-je supprimer un certain fichier sous Linux si sa taille est 0. Je veux l'exécuter dans une crontab sans script supplémentaire.
l filename.file | grep 5th-tab | not eq 0 | rm
Quelque chose comme ça?
Cela supprimera tous les fichiers d'un répertoire (et inférieur) de taille zéro.
find /tmp -size 0 -print0 |xargs -0 rm --
Si vous voulez juste un fichier particulier;
if [ ! -s /tmp/foo ] ; then
rm /tmp/foo
fi
vous voudriez utiliser find :
find . -size 0 -delete
Pour rechercher et supprimer des fichiers vides dans le répertoire et les sous-répertoires actuels:
find . -type f -empty -delete
-type f
est nécessaire car les répertoires sont également marqués pour être de taille zéro.
Le point .
(répertoire actuel) est le répertoire de recherche de départ. Si vous avez GNU find (par exemple, pas Mac OS), vous pouvez l'omettre dans ce cas:
find -type f -empty -delete
Si aucun fichier à rechercher n'est spécifié, le répertoire actuel (.) Est utilisé.
Vous pouvez utiliser la commande find
pour le faire. Nous pouvons faire correspondre les fichiers avec -type f
et les fichiers vides en utilisant -size 0
. Ensuite, nous pouvons supprimer les correspondances avec -delete
.
find . -type f -size 0 -delete
Cela fonctionne pour BSD ordinaire, il devrait donc être universellement compatible avec toutes les versions. Ci-dessous, par exemple, dans pwd
(.
)
find . -size 0 | xargs rm
Sous Linux, la commande stat (1) est utile lorsque vous n'avez pas besoin de find (1):
(( $(stat -c %s "$filename") )) || rm "$filename"
La commande stat ici nous permet juste d’obtenir la taille du fichier, c’est le -c %s
(voir les pages de manuel pour les autres formats). J'exécute le programme stat et en capture la sortie, c'est la $( )
. Cette sortie est vue numériquement, c'est le (( ))
extérieur. Si la taille est zéro, la valeur est FALSE et la deuxième partie du OR est exécutée. Non nul (fichier non vide) sera VRAI, ainsi la machine ne sera pas exécutée.
Pour une suppression non récursive (en utilisant du et awk):
rm `du * | awk '$1 == "0" {print $2}'`
find . -type f -empty -exec rm -f {} \;