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.bam
ya que ese es el patrón dado a find
. Sin embargo, deberá reemplazar cada aparición de _tstaAligned.SortbyCoord.bam
en 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.