2016-09-27 1 views
0

J'ai un répertoire ~ 8000 fichiers de la formeUne regex qui fonctionne dans `find`

output/Manuscript_00750_AnimalGiants-compact.json 
output/Manuscript_00750_AnimalGiants-expanded.json 
output/Manuscript_00750_AnimalGiants.json 
output/Manuscript_00752_AnimalGiants-compact.json 
output/Manuscript_00752_AnimalGiants-expanded.json 
output/Manuscript_00752_AnimalGiants.json 
output/Unit_TZH_12345_Foo-compact.json 
output/Unit_TZH_12345_Foo-expanded.json 
output/Unit_TZH_12345_Foo.json 

J'ai besoin de trouver un regex pour travailler avec l'outil find pour sélectionner tout le manuscrit compact : les

output/Manuscript_00750_AnimalGiants-compact.json 
output/Manuscript_00752_AnimalGiants-compact.json 

venir avec la regex est la partie facile, mais se find à coopérer est la partie difficile.

Voici mon regex:

/Manuscript[0-9_a-zA-Z]+-compact\.json/ 

Voici quelques-unes des commandes que j'ai essayé; tous produisent des résultats zéro. Le CWD est le répertoire ci-dessus output/:

find output -regex "Manuscript[0-9_a-zA-Z]+-compact\.json" 
find output -regex "\./output/Manuscript[0-9_a-zA-Z]+-compact\.json/" 
find output -regex ".*\Manuscript[0-9_a-zA-Z]+-compact.*\json" 

Mais cette commande ne produira des résultats - il sélectionne tous les fichiers qui commencent par « manuscrit », ce qui est évidemment trop large:

find output -regex ".*\Manuscript.*\json" 

Quelle est la bonne Format regex pour find ici?

Répondre

2

Sur OSX vous pouvez utiliser cette find avec regex étendu:

find -E output -regex '.*/Manuscript[0-9_a-zA-Z]+-compact\.json$' 

Sur gnu find utilisation:

find output -regextype posix-extended -regex '.*/Manuscript[0-9_a-zA-Z]+-compact\.json$' 
+0

Le premier fonctionne - merci! Pouvez-vous expliquer pourquoi? Quel est le ''. */'Au début? – commanda

+1

'. */Manuscript' correspond à 0 caractère ou plus avant slash et 'Manuscript'. Même lorsque ce fichier est dans le répertoire courant, il y aura '. /' Avant 'Manuscript' – anubhava

+1

Pour référence, l'option' -E' est dérivée de FreeBSD, et devrait fonctionner dans NetBSD, DragonflyBSD, mais peut-être pas OpenBSD. – ghoti