Trouver des files dans le directory avec des noms appariés

J'exécute des tests d'un set de tests de taille et de contenu variables. Les files de données sont ajoutés et supprimés fréquemment. Je cherche un moyen automatisé de rassembler une list de files.

Tous les files sont dans les sous-directorys de D ; J'ai besoin du directory complet et du nom ajouté à un file text. Cependant, j'ai seulement besoin de ces files qui ont un file "apparié", qui a le même nom de file mais une extension différente (donc … nom de file différent, mais de manière structurée). Donc, s'il y a un MyFileName.A et MyFileName.B , alors je veux D/.../MyFileName ajouté à la list de files.

Il y a des files .A sans files .B , mais pas de files .B sans files .A . Si un .A a un file .B , les deux files se trouvent dans le même directory.

Aucun conseil?

Si aucun nom de file ne contient de nouvelle ligne, vous pouvez:

 find D -type f \( -name '*.A' -o -name '*.B' \) | sed 's/\.[^.]*$//' | sort | uniq -d >paired_files 

Cela devrait fonctionner dans le cas plus général où il y a des files .B sans files .A .

Pour gérer n'importe quel nom de file en utilisant les outils GNU récents:

 find D -type f \( -name '*.A' -o -name '*.B' \) -print0 | sed -z 's/\.[^.]*$//' | sort -z | uniq -dz | tr '\0' '\n' >paired_files 

Si votre déclaration est vraie "il n'y a pas de files .B sans files .A", obtenez une list des files .B et supprimez l'extension.

 find $directory-to-search -name "*.B" | sed -r -e "s~(.*)\.B~\1~g"