1 votes

Terminal : Ajout d'une logique permettant de "trouver" des répertoires contenant soit des [critères A], soit des [critères B].

J'ai hérité d'une vaste archive multimédia sans schéma organisationnel unifié. Son contenu date d'au moins dix ans. On m'a demandé de trouver une aiguille dans cette botte de foin, et j'ai quelques idées quant au nom de cette aiguille. Mais je ne suis pas certain de son nom. Je veux utiliser un seul find dans le terminal pour rechercher des noms alternatifs. Et je veux inclure un deuxième ensemble : les extensions de fichiers possibles. En pseudocode, voici ce que je veux dire : find [in a given directory] [files and folders whose name matches (*guess1* OR *guess2*) AND whose name matches (*.extension1 OR *.extension2)] . Comment dois-je exprimer cela dans le terminal ?

3voto

Ben Points 171

Vous pouvez le faire en utilisant ls et grep avec des expressions régulières

ls | grep -E "(guess1|guess2)(\.extension1|\.extension2)"

Ou si vous avez besoin de regarder récursivement dans les dossiers :

ls -R | grep -E "(guess1|guess2)(\.extension1|\.extension2)"

2voto

200_success Points 923

Utilisez la commande

find /dir/to/search \( -iname '*guess1*' -o -iname '*guess2*' \) \
                    \( -iname '*.extension1' -o -iname '*.extension2' \)

find fonctionne de manière récursive. Utilisez -maxdepth 1 pour le rendre non-récursif.

-iname fait une correspondance insensible à la casse du nom de fichier.

Les arguments sont implicitement joints par AND, mais vous pouvez utiliser la commande -o pour le rendre OR. Les parenthèses doivent être échappées par une barre oblique inverse pour les protéger du shell.

(On pourrait l'écrire sur une seule ligne ; ici, j'ai brisé les lignes en utilisant la fonction \return pour plus de lisibilité).

1voto

Bakanekobrain Points 83

find est lent. grep et d'autres outils de recherche de texte sont beaucoup plus rapides. À moins que vous ne pensiez trouver l'aiguille dans la botte de foin du premier coup, il est probablement préférable de faire un find dans un fichier temporaire, par exemple find . -print > /tmp/find.out puis recherchez dans ce fichier les noms de fichiers qui répondent à vos critères de recherche.

1voto

200_success Points 923

Si le volume est indexé par Spotlight, alors utilisez mdfind pour des résultats plus rapides.

mdfind -onlyin /dir/to/search '(kMDItemFSName==*guess1* || kMDItemFSName==*guess2*)' \
                     '&& (kMDItemFSName=*.extension1 || kMDItemFSName=*.extension2)'

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X