Удаление определенных слов из имени файла

Удаление определенных слов из имени файла

У меня есть набор файлов, которые при обработке в моей программе выводятся с другим именем (что означает, что процесс успешно завершен).

Например, входной файл может иметь вид SAM111_tsta.fastq, а затем выводится как SAM111_tstaAligned.SortbyCoord.bam.

Мне интересно, есть ли способ (через командную строку) рекурсивно просмотреть каталог и найти все файлы, в которых есть «Aligned.SortbyCoord.bam», и удалить только «Aligned.SortbyCoord», чтобы в итоге остался «SAM111_tsta.bam»?

решение1

Если вы нашли похожееэтот. Вы должны быть в состоянии сделать что-то вроде:

find dir -name '*_tstaAligned.SortbyCoord.bam' -exec bash -c 'mv "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;

Хотя используется bash ${var//find_all/substitute_with_this}, вы будете соответствовать только файлам, заканчивающимся на , _tstaAligned.SortbyCoord.bamпоскольку это шаблон, заданный для find. Однако вы бы заменили каждое вхождение _tstaAligned.SortbyCoord.bamв имени, если бы в каком-либо файле их было несколько. (Я думаю, что это маловероятно.)

Для тестирования сделайте что-то вроде:

find dir -name '*tstaAligned.SortbyCoord.bam' -exec bash -c 'printf "mv \"%s\" \"%s\"\n" "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;

решение2

Есть команда переименования,

find -name '*Aligned.SortbyCoord.bam' -exec rename Aligned.SortbyCoord '' + \;

который, как оказалось, находится вutil-linuxтак что вам придется его установить, в пакете есть несколько полезных вещей.

Или вы можете составить простой список с помощью

find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" "\1.bam"/e'

если ваш sed достаточно новый, или

find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" "\1.bam"/' \
| sh -x

если это не так, или вы можете создать быструю функцию оболочки, чтобы сделать это,

doit () { while read; do mv "$REPLY" "${REPLY%Aligned*}.bam"; done; }
find -name '*Aligned.SortbyCoord.bam' | doit

или как однострочник

find -name '*Aligned.SortbyCoord.bam' | while read f; do mv "$f" "${f%A*}.bam"; done

решение3

Выполните следующую команду в каталоге, где, как вы подозреваете, находятся нежелательные файлы:

Найти . -iname "Выровненный.СортироватьпоКоординатам.bam" | xargs rm -f

Я бы рекомендовал сначала запустить команду find, чтобы проверить, какие нужные файлы поступают в качестве вывода, а затем удалить их с помощью xargs rm -f.

Связанный контент