Bestimmte Wörter aus dem Dateinamen löschen

Bestimmte Wörter aus dem Dateinamen löschen

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.bamda dies das für gegebene Muster ist find. Sie würden jedoch jedes Vorkommen von _tstaAligned.SortbyCoord.bamim 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.

verwandte Informationen