Eliminar ciertas palabras del nombre del archivo

Eliminar ciertas palabras del nombre del archivo

Tengo un conjunto de archivos que cuando se procesan en mi software, salen con un nombre diferente (lo que indica que completó exitosamente el proceso).

Por ejemplo, el archivo de entrada puede leer SAM111_tsta.fastq y luego aparecer como SAM111_tstaAligned.SortbyCoord.bam.

Me pregunto si hay una manera (a través de la línea de comando) de examinar un directorio de forma recursiva y localizar todos los archivos que tienen 'Aligned.SortbyCoord.bam" y que solo han eliminado 'Aligned.SortbyCoord' para terminar con 'SAM111_tsta .bam?

Respuesta1

Si encuentra algo parecidoeste. Deberías poder hacer algo como:

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

Aunque se utiliza bash ${var//find_all/substitute_with_this}, solo coincidirá con los archivos que terminan en, _tstaAligned.SortbyCoord.bamya que ese es el patrón dado a find. Sin embargo, deberá reemplazar cada aparición de _tstaAligned.SortbyCoord.bamen el nombre, si algún archivo tiene varias. (Es poco probable, supongo).

Para realizar pruebas, haga algo como:

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

Respuesta2

Ahí está el comando de cambio de nombre,

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

que resulta que está enutilidad-linuxentonces tendrías que instalarlo, el paquete tiene algunas cosas interesantes.

O podrías preparar una lista simple con

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

si tu sed es lo suficientemente nuevo, o

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

si no es así, o puedes crear una función de shell rápida para hacerlo,

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

o como un oneliner

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

Respuesta3

Ejecute el siguiente comando en el directorio donde sospecha que están presentes los archivos no deseados:

Encontrar . -nombre "Alineado.Ordenado por Coord.bam" | xargs rm -f

Recomendaría ejecutar el comando de búsqueda primero para validar los archivos requeridos que vienen como salida y luego eliminarlos usando xargs rm -f.

información relacionada