Com find
e Expansão de deslocamento do Bash ${parameter:offset:length}
, você poderia fazer:
find -type f -execdir bash -c 'printf "%s\n" "${@:1:${#@}-12}" ' _ {} +
./Wf_ABHGD_AFFGF_DFDF_201101211221.XML
./Wf_ABHGD_AFFGF_DFDF_201202211222.XML
./Wf_ABHGD_AFFGF_DFDF_201304411223.XML
./Wf_ABHGD_AFFGF_DFDF_201406611224.XML
O ${#@}
está retornando o número total de arquivos (ou argumentos em média).
repita acima para cada conjunto de arquivos que você tenha especificando o padrão na opção -name
do comando find acima.
Ou para obter padrões por script:
# !/bin/bash
allFILEs=(*.XML)
PATTERNs=$(printf "%s\n" "${allFILEs[@]%_*}" |sort -u)
for pattern in ${PATTERNs[@]};
do
find -type f -name "*${pattern}*" -execdir bash -c '
printf "%s\n" "${@:1:${#@}-12}"' _ {} + 2>/dev/null;
done
altere printf
com rm
(no comando find ...
) quando você testou e veja quais arquivos estão sendo excluídos.