cd <the directory you want>
find . -type f ! -iname "*.pdf" -delete
- La première commande vous mènera au répertoire dans lequel vous voulez supprimer vos fichiers
- La deuxième commande supprimera tous les fichiers sauf ceux qui se terminent par
.pdf
de nom de fichier
Par exemple, s’il existe un répertoire appelé temp
dans votre dossier personnel:
cd ~/temp
puis supprimez les fichiers:
find . -type f ! -iname "*.pdf" -delete
Cela supprimera tous les fichiers sauf xyz.pdf
.
Vous pouvez combiner ces deux commandes pour:
find ~/temp -type f ! -iname "*.pdf" -delete
.
est le répertoire en cours. !
signifie prendre tous les fichiers sauf ceux avec .pdf
à la fin. -type f
sélectionne uniquement les fichiers, pas les répertoires. -delete
signifie le supprimer.
REMARQUE: cette commande supprimera tous les fichiers (sauf les fichiers pdf mais les fichiers cachés) du répertoire actuel ainsi que de tous les sous-répertoires. !
doit venir avant -name
. -name
inclura simplement seulement .pdf
, tout -iname
en incluant à la fois .pdf
et.PDF
Pour supprimer uniquement dans le répertoire actuel et non dans les sous-répertoires, ajoutez -maxdepth 1
:
find . -maxdepth 1 -type f ! -iname "*.pdf" -delete
Edward Torvalds
la source
.
signifie "et"?!
signifie "sauf"-name
signifie que vous voulez exclure par un paramètre de nom et que-delete
l'action est-elle à entreprendre lors de la recherche? Donc, il recherche tout sauf "* .pdf" et les supprime? Ou ai-je mal compris?.
signifie répertoire en cours.!
signifie prendre tous les fichiers sauf celui avec.pdf
à la fin.-delete
signifie le supprimer. suis-je clair maintenant?-maxdepth 1
paramètre pour commencer. Ensuite, suggérez de supprimer le paramètre au cas où vous voudriez le supprimer récursivement.-iname
place des-name
fichiers avec lesquels l'.PDF
extension risque de glisser.Avec
bash
le shell globing étendu, vous pouvez supprimer tous les fichiers avec des extensions autres que l’.pdf
utilisation deComme indiqué par @pts, les
--
caractères indiquent la fin de toutes les options de commande; sécurisez la commande dans le cas très rare de fichiers dont le nom commence par un-
caractère.Si vous souhaitez supprimer des fichiers sans extension ainsi que ceux avec des extensions autres que
.pdf
, alors, comme l'a souligné @DennisWilliamson, vous pouvez utiliserLa navigation étendue doit être activée par défaut, mais sinon, vous pouvez le faire en utilisant
Surtout si vous souhaitez utiliser ceci dans un script, il est important de noter que si l'expression ne correspond à rien (c'est-à-dire s'il n'y a pas de fichiers non-pdf dans le répertoire), alors par défaut, le glob sera passé non développé au
rm
commande, entraînant une erreur commeVous pouvez modifier ce comportement par défaut à l'aide de l'
nullglob
option shell, qui a toutefois son propre problème. Pour une discussion plus approfondie, voir NullGlob - Wiki de Gregla source
rm *~*.pdf
!(*.py)
. Aussi, vraisemblablement, si l’opérateur ne veut que des fichiers ".pdf", les fichiers sans extension doivent également être supprimés et non ignorés.Supprimer dans la corbeille :
Ou via
mv
commande (mais de cette façon, vous ne pouvez pas le restaurer depuis la Corbeille car il n'enregistre pas les informations .trashinfo, cela signifie donc que vous avez déplacé vos fichiers vers une destination où il se trouve comme suit).la source
rm
.La méthode la plus simple: créez un autre répertoire quelque part (si vous ne supprimez que dans un répertoire, pas de manière récursive, il peut même s'agir d'un sous-répertoire); déplacez tous les fichiers .pdf là-bas; supprimer tout le reste; déplacez le pdf en arrière; supprimer le répertoire intermédiaire.
Rapide, facile, vous pouvez voir exactement ce que vous faites. Assurez-vous simplement que le répertoire intermédiaire se trouve sur le même périphérique que le répertoire que vous êtes en train de nettoyer afin que les déplacements soient renommés, et non des copies!
la source
Utilisez GLOBIGNORE de bash:
De la page de manuel de bash:
Un test rapide:
Sortie:
la source
Soyez prudent et composez: utilisez xargs
Voici une approche que j’aime bien, car cela me permet d’être très prudent: composez un moyen d’afficher uniquement les fichiers que je veux supprimer, puis envoyez-les à l’
rm
utilisationxargs
. Par exemple:ls
me montre toutls | grep pdf
me montre les fichiers que je veux garder. Hmm.ls | grep -v pdf
montre le contraire: tout sauf ce que je veux garder. En d'autres termes, il affiche la liste des choses que je veux supprimer. Je peux le confirmer avant de faire quoi que ce soit de dangereux.ls | grep -v pdf | xargs rm
envoie exactement cette listerm
pour suppressionComme je l'ai dit, j'aime principalement ceci pour la sécurité qu'il procure: ce n'est pas un hasard
rm *
pour moi. Deux autres avantages:ls
oufind
pour obtenir la liste initiale, comme vous préférez. Vous pouvez utiliser tout ce que vous voulez pour réduire cette liste - une autregrep
, une partieawk
ou autre. Si vous ne devez supprimer que les fichiers dont le nom contient une couleur, vous pouvez le créer de la même manière.find
pour trouver etrm
pour supprimer, plutôt que d'avoir à retenir quefind
accepte un-delete
drapeau. Et si vous faites cela, encore une fois, vous pouvez composer des solutions alternatives. peut-être au lieu derm
, vous pourriez créer unetrash
commande qui déplace le fichier dans la corbeille (en autorisant "undeletion") et le redirige vers elle au lieu derm
. Vous n'avez pas besoin defind
supporter cette option, il vous suffit de la suivre .Mise à jour
Voir les commentaires de @pabouk pour savoir comment modifier ceci afin de traiter certains cas de bords, tels que les sauts de ligne dans les noms de fichiers, les noms de fichiers tels que
my_pdfs.zip
, etc.la source
pdf
n'importe où dans son nom. --- b) Il supprimera les fichiers PDF si l’une des lettres du suffixe est en majuscule. --- c) Ce n'est pas une bonne idée d'utiliser la sortie dels
. Cela ne fonctionnera pas avec les noms de fichiers contenant des nouvelles lignes. Certaines implémentations dels
remplacement de caractères spéciaux, par exemple tabulation par?
. --- Il est préférable d'utiliser:find -maxdepth 1 -print0
. (pas si court quels
:) ----- Pour résoudre a) et b) utilisez lagrep -vi '\.pdf$'
solution --- complète (seulement GNU):find -maxdepth 1 -print0 | grep -viz '\.pdf$' | xargs -0 rm
| head -20
au moins voir si cela semble assez correct, alors que si vous venezrm my_pattern
, vous n'avez aucune chance de repérer une grosse erreur.find . -type f ! -name "*.pdf"
pour imprimer sur la console, ou diriger vers moins ou un fichier. [et puis pipe à xargs à rm si désiré, comme les commentaires de pabouk (avec -print0 | ... -0 pour les noms de fichiers étranges)]Je résous généralement ces problèmes à partir de l'interpréteur interactif Python:
C'est peut-être plus long qu'un one-line avec
find
ouxargs
, mais c'est extrêmement résistant, et je sais exactement ce que ça fait, sans avoir à faire des recherches au préalable.la source
for item in [f for f in os.listdir('.') if not f.endswith('.pdf')]: os.remove(item)
python -c "import os; for f in os.listdir('.'): if not f.endswith('.pdf'): os.remove(f)"
[os.remove(f) for f in os.listdir('.') if not f.endswith('.pdf')]
meilleure réponse (par rapport à ma réponse précédente) à cette question sera en utilisant la puissante
file
commande.maintenant votre problème:
le travail de
for
commande est de donner les fichiers du répertoire courant sous forme de variable$var
.if-then
La commande affiche le nom des fichiers pdf en prenant le statut de sortie0
de lafile -i "$var" | grep -q 'application/pdf\;'
commande from , elle ne donnera le statut de sortie0
que si elle trouve des fichiers pdf.la source
Attention! Mieux vaut essayer d'abord
la source
-i
avecgrep
pour la correspondance insensible à la casse.Lire en tant que, supprimez tous les fichiers qui ne sont pas
a.pdf
oux.pdf
.Cela fonctionne en utilisant des 2 globs étendues, l'extérieur
!()
pour annuler le glob contenu qui lui - même exige que le glob doit correspondre à un ou plusieursa
oux
modèles avant le.pdf
suffixe. Voir glob # extglob .la source
manière de coque portable
Quasiment POSIX et compatible avec tout style shell Bourne (
ksh
,bash
,dash
). Parfaitement adapté aux scripts portables et lorsque vous ne pouvez pas utiliserbash
le globbing de shell étendu.perl:
Ou légèrement plus propre:
python alternatif
la source
Faites attention à ce que vous supprimez!
Un moyen sûr de le tester avant d’essayer de supprimer est de commencer par tester
ls
, car certains comportements non détectés pourraient supprimer des fichiers non souhaités. Et vous pouvez le faire directement en dehors du répertoire.ls
est similaire àrm
, donc:Cela va lister
Et maintenant, vous pouvez voir ce que vous supprimez et pouvez les supprimer en toute sécurité:
Et c'est tout. Vous pouvez utiliser un caractère générique
*
pour être plus sélectif, comme garder uniquement les documents de cours de programmation:la source