Itere nas linhas com _
como IFS
, obtenha a primeira parte desejada contendo dígitos e copie os arquivos começando com esses dígitos:
shopt -s nullglob
while IFS=_ read -r i _; do [[ $i =~ ^[0-9]{5}$ ]] && echo cp -it dest/ "${i}"*; done <file.txt
Expandido:
#!/bin/bash
shopt -s nullglob ##Expands to null string if no match while doing glob expansion,
##rather than the literal
while IFS=_ read -r i _; do ##Iterate over the lines of file.txt,
##with '_' as the 'IFS' i.e. word splitting
##happens on each '_' only, variable 'i'
##will contain the digits at start; '_' is a
##throwaway variable containing the rest
[[ $i =~ ^[0-9]{5}$ ]] \ ##Check if the variable contains only 5 digits
&& echo cp -it /destination/ "${i}"* ##if so, copy the relevant files starting with those digits
done <file.txt
Substitua file.txt
pelo arquivo de origem real e /destination/
pelo diretório de destino real. Aqui, echo
está incluído para fazer o teste de secagem; se satisfeito com os comandos a serem executados, é só se livrar de echo
:
shopt -s nullglob
while IFS=_ read -r i _; do [[ $i =~ ^[0-9]{5}$ ]] && cp -it dest/ "${i}"*; done <file.txt