Schleife zum Einfügen bestimmter Dateien in verschiedene Verzeichnisse

Schleife zum Einfügen bestimmter Dateien in verschiedene Verzeichnisse

Ich habe einige Verzeichnisse, die eine ähnlich benannte Datei enthalten, z. B. (*Sample_name*.base.coverage.txt). Und ich möchte alle *base.coverage.txt-Dateien zusammenfügen. Ich habe etwas geschrieben, aber es ist nicht ganz richtig, da ich nicht glaube, dass ich sie tatsächlich zusammenfüge.

cd /g/bo/vir/analysis
find -type d  |
while read dir; do
if [ -f $dir/*.base.coverage.txt ]; then
    paste  $dir/*.base.coverage.txt >> paste_all_l30.p90.base.cov.norm

fi
done

Ich denke auch über eine andere Loop-Methode nach, bin mir aber nicht sicher, wie ich die Liste der Verzeichnisse in ein Array bekomme.

for x in $dir; do cat /$x/*.base.coverage.txt;done > paste_all_l30.p90.base.cov.norm

Irgendeine Hilfe? Danke

Antwort1

Versuche dies:

find . -type f -name '*.base.coverage.txt' \
  | xargs paste > paste_all_l30.p90.base.cov.norm

Dies funktioniert, solange nicht zu viele Dateien vorhanden sind. Wenn es viele Dateien sind, dann Folgendes:

touch paste_all_l30.p90.base.cov.norm
for file in `find . -type f -name '*.base.coverage.txt'`; do
  paste paste_all_l30.p90.base.cov.norm $file > tmp
  mv tmp paste_all_l30.p90.base.cov.norm
done

Antwort2

Versuche dies:

find . -type f -name "*.base.coverage.txt" -exec sh -c 'paste {} paste_all_l30.p90.base.cov.norm > tmp ; mv tmp paste_all_l30.p90.base.cov.norm' \;

Antwort3

Am einfachsten können Sie mehrere Verzeichnisse rekursiv durchsuchen, indem Sie ein kurzes Python-Skript schreiben und die os.path.walkFunktion verwenden, um die verschachtelten Verzeichnisse rekursiv zu durchsuchen. Zum Anhängen können Sie shutil.copyfileobjinnerhalb der Schleife Dateinamen mit einem regulären Ausdruck überprüfen.

verwandte Informationen