Ich habe eine Reihe von Dateien, die bei der Verarbeitung in meiner Software einen anderen Namen erhalten (was bedeutet, dass der Vorgang erfolgreich abgeschlossen wurde).
Beispielsweise könnte die Eingabedatei SAM111_tsta.fastq lauten und dann als SAM111_tstaAligned.SortbyCoord.bam ausgegeben werden.
Ich frage mich, ob es eine Möglichkeit (über die Befehlszeile) gibt, ein Verzeichnis rekursiv zu durchsuchen und alle Dateien zu finden, die „Aligned.SortbyCoord.bam“ haben und aus denen nur „Aligned.SortbyCoord“ entfernt wurde, sodass ich am Ende „SAM111_tsta.bam“ erhalte?
Antwort1
Wenn Sie ähnliches gefunden habenDasSie sollten in der Lage sein, Folgendes zu tun:
find dir -name '*_tstaAligned.SortbyCoord.bam' -exec bash -c 'mv "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;
Obwohl die Bash ${var//find_all/substitute_with_this}
verwendet wird, werden nur die Dateien abgeglichen, die mit enden, _tstaAligned.SortbyCoord.bam
da dies das für gegebene Muster ist find
. Sie würden jedoch jedes Vorkommen von _tstaAligned.SortbyCoord.bam
im Namen ersetzen, wenn eine Datei mehrere davon hat. (Unwahrscheinlich, denke ich.)
Machen Sie zum Testen etwa Folgendes:
find dir -name '*tstaAligned.SortbyCoord.bam' -exec bash -c 'printf "mv \"%s\" \"%s\"\n" "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;
Antwort2
Es gibt den Umbenennungsbefehl,
find -name '*Aligned.SortbyCoord.bam' -exec rename Aligned.SortbyCoord '' + \;
Wie sich herausstellt, ist inutil-linuxSie müssten es also installieren. Das Paket enthält einige nette Dinge.
Oder Sie könnten eine einfache Liste erstellen mit
find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" "\1.bam"/e'
wenn Ihr SED neu genug ist, oder
find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" "\1.bam"/' \
| sh -x
wenn nicht, oder Sie können eine schnelle Shell-Funktion dafür erstellen,
doit () { while read; do mv "$REPLY" "${REPLY%Aligned*}.bam"; done; }
find -name '*Aligned.SortbyCoord.bam' | doit
oder als Oneliner
find -name '*Aligned.SortbyCoord.bam' | while read f; do mv "$f" "${f%A*}.bam"; done
Antwort3
Führen Sie den folgenden Befehl in dem Verzeichnis aus, in dem Sie die unerwünschten Dateien vermuten:
Suchen . -iname "Ausgerichtet.SortbyCoord.bam" | xargs rm -f
Ich würde empfehlen, zuerst den Befehl „Find“ auszuführen, um zu überprüfen, ob die erforderlichen Dateien als Ausgabe kommen, und sie dann mit „xargs rm -f“ zu löschen.