
I algunos directorios que contienen un archivo con un nombre similar, por ejemplo (*Sample_name*.base.coverage.txt). Y me gustaría pegar todos los archivos *base.coverage.txt juntos. Tengo algo escrito, pero no está del todo bien porque no creo que los esté pegando juntos.
cd /g/bo/vir/analysis
find -type d |
while read dir; do
if [ -f $dir/*.base.coverage.txt ]; then
paste $dir/*.base.coverage.txt >> paste_all_l30.p90.base.cov.norm
fi
done
También estoy pensando en un método de bucle diferente, pero no estoy seguro de cómo obtener la lista de directorios en una matriz.
for x in $dir; do cat /$x/*.base.coverage.txt;done > paste_all_l30.p90.base.cov.norm
¿Alguna ayuda? gracias
Respuesta1
Prueba esto:
find . -type f -name '*.base.coverage.txt' \
| xargs paste > paste_all_l30.p90.base.cov.norm
Esto funcionará siempre que no haya demasiados archivos. Si hay muchos archivos, entonces esto:
touch paste_all_l30.p90.base.cov.norm
for file in `find . -type f -name '*.base.coverage.txt'`; do
paste paste_all_l30.p90.base.cov.norm $file > tmp
mv tmp paste_all_l30.p90.base.cov.norm
done
Respuesta2
prueba esto:
find . -type f -name "*.base.coverage.txt" -exec sh -c 'paste {} paste_all_l30.p90.base.cov.norm > tmp ; mv tmp paste_all_l30.p90.base.cov.norm' \;
Respuesta3
Lo más fácil para recurrir a varios directorios sería escribir un breve script en Python y utilizar la os.path.walk
función para recurrir a los directorios anidados. Para agregar, puede usar shutil.copyfileobj
dentro del bucle, verificar los nombres de archivos con una expresión regular.