
Wenn ich dies mache find
:
find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK"
dann bekomme ich in STDOUT, was ich erwarte:
tp101.day1.dc.results/amblock/stats.tp101_day1+tlrc.HEAD
tp101.day1.dc.results/amblock/stats.tp101_day1+tlrc.BRIK
tp101.day2.dc.results/amblock/stats.tp101_day2+tlrc.HEAD
tp101.day2.dc.results/amblock/stats.tp101_day2+tlrc.BRIK
...
Wenn ich eine -exec
Klausel zum Verknüpfen der gefundenen Dateien hinzufüge:
find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK" -exec ln -s {} ${TRIADS_GROUP} \;
dann verknüpft es nur die BRIKs:
stats.tp101_day1+tlrc.BRIK@
stats.tp101_day2+tlrc.BRIK@
...
Fragen
- Was passiert?
Gibt es eine effizientere Möglichkeit, find mithilfe eines einzigen Platzhalterausdrucks anzuweisen, .HEAD und .BRIK zurückzugeben? Ich habe Dinge wie diese ausprobiert:
find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*{HEAD,BRIK}"
aber ich habe es nicht zum Laufen gebracht.
Antwort1
Frage 1: Was ist los?
Sie -o
teilen Ihre Argumente auf. Das -exec
läuft nur, wenn das Zeug auf der gleichen Seite von -o
erfolgreich ist (das -path "*amblock/stats.*BRIK"
). Wenn Sie -exec
unter beiden Bedingungen laufen möchten, müssen Sie sie in Klammern setzen:
find ${TRIADS_DIR}/*.dc.results \( -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK" \) -exec ln -s {} ${TRIADS_GROUP} \;
Frage 2: Gibt es eine effizientere Möglichkeit, find mithilfe eines einzigen Platzhalterausdrucks anzuweisen, .HEAD und .BRIK zurückzugeben?
Nein, irgendwie schon. Einige find
Implementierungen haben ein -regex
nicht standardmäßiges Prädikat, das Sie stattdessen verwenden könnten, aber ich würde das nicht als „effizienter“ bezeichnen.