2016-07-26 2 views
1

Quand je lance la commande suivante, je reçois une liste de fichierstrouver le fichier avec des valeurs numériques supérieures à un certain nombre

find . -type f -name '*_duplicate_[0-9]*.txt' 

./prefix_duplicate_001.txt 

./prefix_duplicate_002.txt 

./prefix_duplicate_003.txt 

./prefix_duplicate_004.txt 

./prefix_duplicate_005.txt 

Maintenant, je suis seulement intéressé par les fichiers qui ont le nombre supérieur ou égal à 003. Comment puis-je faire cela?

Merci d'avance.

Répondre

2

L'utilisation -regex option find, vous pouvez modifier regex pour obtenir tous les fichiers ayant une valeur 3 ou plus après _duplicate_ avec des zéros non significatifs:

find . -regextype posix-extended -type f \ 
     -regex '.*_duplicate_0*([3-9]|[1-9][0-9])[0-9]*\.txt' 

Sur Mac OS X utilisent cette find:

find -E . -type f -regex '.*_duplicate_0*([3-9]|[1-9][0-9])[0-9]*\.txt' 

./prefix_duplicate_003.txt 
./prefix_duplicate_004.txt 
./prefix_duplicate_005.txt 
+2

À moins que je ne manque quelque chose, je ne pense pas que cela trouvera '_010' ... – twalberg

+0

Oui vous avez raison @twalberg, il est maintenant corrigé – anubhava

+0

@anubhava en quelque sorte en cours d'exécution ces commandes sur mon macbook me donne l'erreur suivante "find: -regextype: inconnu principal ou opérateur" – kirikoumath

0
00[3-9]|(([1-9]\\d\\d)|(\\d[1-9]\\d)) 

uniquement pour la partie numéro.

+1

Alors que le code parle souvent pour lui-même, il est bon d'ajouter un peu explication à votre code. Cela a surgi dans la file d'attente de révision, comme les réponses au code ont tendance à le faire. Veuillez également appliquer un formatage approprié. – Will

+0

@Nous vous remercions de votre notification – beatrice

+1

Bien que les réponses au code ne soient pas interdites, veuillez comprendre qu'il s'agit d'une communauté de questions et réponses, plutôt que d'une communauté, et que, généralement, le PO a compris le code comme réponse, il/elle aurait trouvé une solution similaire par lui-même et n'aurait pas posté de question en premier lieu. Le même principe s'applique plus loin, à tout futur lecteur qui pourrait ne pas être familier avec le code présenté. En tant que tel, veuillez fournir un contexte à votre réponse et/ou code en expliquant * comment * et/ou * pourquoi * cela fonctionne. – XenoRo

0

utilisation ce motif

.*_duplicate_(?!00[1-2])\d{3}\.txt 

Demo

0

Autant que je préfère utiliser des commandes simples lorsque cela est possible, je pense que peut-être c'est ce que vous avez besoin ici:

find . -type f -name '*_duplicate_[0-9]*.mat' | awk -F '[_.]' '$4 > 3 { print $0 }' 

Il y a des variations sur ce point - par exemple, ceci:

find . -type f -name "*.mat" | awk -F '[_.]' '$0 ~ /_duplicate_[0-9]*.mat/ && $4 > 3 { print $0 }' 

Mais je ne suis pas sûr que ce qui fait vraiment une différence d'un point de vue de l'efficacité ...