J'ai un exercice, dans lequel je dois supprimer tous les fichiers qui ne sont pas jpeg
.
J'ai essayé find -type f |xargs file| grep -iv 'jpeg'
, mais cela ne fonctionne pas.
J'ai un exercice, dans lequel je dois supprimer tous les fichiers qui ne sont pas jpeg
.
J'ai essayé find -type f |xargs file| grep -iv 'jpeg'
, mais cela ne fonctionne pas.
Pour supprimer tous les fichiers réguliers non-jpeg dans le répertoire actuel ou ses sous-répertoires, utilisez :
find . -type f -exec bash -c 'file -bi "$1" | grep -q image/jpeg || rm "$1"' none {} \;
Cette approche est sécuritaire pour tous les noms de fichiers. Elle fonctionnera même si les noms de fichiers contiennent des sauts de ligne ou d'autres caractères difficiles.
find . -type f
Ceci lance une commande find
, en restreignant les fichiers trouvés aux fichiers réguliers, -type f
.
-exec bash -c 'file -bi "$1" | grep -q image/jpeg || rm "$1"' none {} \;
Pour tous les fichiers trouvés, cela exécute une commande bash pour tester le type de fichier. En particulier, file -bi "$1" | grep -q image/jpeg
renverra vrai si file
rapporte que le fichier a le type MIME image/jpeg
. L'opérateur ||
assure que la commande rm
qui suit est exécutée uniquement pour les fichiers qui ont échoué au test jpeg. Ainsi, tous les fichiers non-jpeg sont supprimés.
Pour supprimer tous les fichiers dont les noms n'ont pas pour extension .jpeg
:
find . -type f ! -name '*.jpeg' -delete
Cette approche est également sécuritaire pour tous les noms de fichiers. Elle fonctionnera même si les noms de fichiers contiennent des sauts de ligne ou d'autres caractères difficiles.
find .
Trouve tous les fichiers dans le répertoire actuel et ses sous-répertoires
-type f
Se restreindre seulement aux fichiers réguliers
! -name '*.jpeg'
-name '*.jpeg'
trouverait tous les fichiers dont les noms ont pour extension .jpeg
. Cependant, le point d'exclamation, !
, signifie négation. Ainsi, ! -name '*.jpeg'
restreint notre recherche aux fichiers dont les noms n'ont pas pour extension .jpeg
.
-delete
Cela indique à find
de supprimer les fichiers qui correspondent aux critères ci-dessus.
Pour tester la commande, enlevez le -delete
:
find . -type f ! -name '*.jpeg'
Cela vous montrera quels fichiers seront supprimés lorsque l'action -delete
sera utilisée.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.