web-dev-qa-db-fra.com

Comment utiliser plusieurs critères pour -find

J'ai un dossier où ma musique non étiquetée est l'endroit où je veux lancer un script pour supprimer tous les .png et .jpg sauf ceux commençant par le mot "cover". Voici ce que j'ai essayé:

find . -name '*.jpg' -or -name '*.png' -not - -name 'cover.*'
find . (-name '*.jpg' -or -name '*.png'\) -not - -name '*.png'

Et une autre variation des deux, aucune n'a fonctionné. (Je n'ai pas inclus le -delete à la fin exprès)

6
user991023

La commande que vous recherchez est:

find . -type f \( -name '*.jpg' -or -name '*.png' \) -not -name "cover.*"
  • Ajouter type -f fera que la commande find ne cherchera que les fichiers.

  • Dans votre deuxième commande, vous devez ajouter un espace après \( et avant \) (vous avez également oublié \ avant ().

  • De plus, vous n'avez pas besoin d'un - entre -not et -name. Votre première commande fonctionne bien si vous la supprimez, bien qu'elle ne produise pas la sortie que vous souhaitez (voir JoL's comment ).

Vous pouvez en savoir plus sur la syntaxe et les options de find sur la ligne de commande page de manuel Ubunt , ou exécuter la commande man find pour lire le manuel dans le terminal. Plus précisément, lisez la section OPERATORS du manuel, car c'est ce qui semble vous dérouter le plus.

Remarque: La plupart des commandes de terminal fournissent un manuel avec la syntaxe de commande appropriée et les options disponibles que vous pouvez lire si vous exécutez man <command> dans votre terminal.

7
user3140225