Em primeiro lugar, no /tmp/test
caminho do arquivo, tenho os diretórios abaixo
amb
bmb
cmb
Ao executar o find
comando, estou obtendo a lista abaixo de arquivos dentro desses três diretórios:
amb/eng/canon.amb
bmb/eng/case.bmb
cmb/eng/hint.cmb
Estou tentando obter cada arquivo list1
usando um for
loop e com base no tipo de arquivo *.amb
ou *.bmb
naquele *.cmb
IF específico que deve ser executado:
cd /tmp/test
find */ -type f -exec ls {} \; > /tmp/test/list1
for file in `cat /tmp/test/list1`
do
if [ -f *.amb ]
then
sed "s/amb/amx/g" /tmp/test/list1 > /tmp/test/list2
ls /tmp/test/list2 >> /tmp/test/finallist
fi
if [ -f *.bmb ]
then
sed "s/bmb/bmx/g" /tmp/test/list1 > /tmp/test/list2
ls /tmp/test/list2 >> /tmp/test/finallist
fi
if [ -f *.cmb ]
then
sed "s/cmb/cmx/g" /tmp/test/list1 > /tmp/test/list2
ls /tmp/test/list2 >> /tmp/test/finallist
fi
done
echo "*********************"
echo -e "\nFinal list of files after replacing from tmp area"
felist=`cat /tmp/test/finallist`
echo -e "\nfefiles_list=`echo $felist`"
Portanto, minha saída final deve ser:
amx/eng/canon.amx
bmx/eng/case.bmx
cmx/eng/hint.cmx
Acho que você está tentando aplicar uma ação diferente, dependendo do sufixo do arquivo:
Aliás,
find */ -type f -exec ls {} \; > /tmp/test/list1
poderia ser melhor escrito comofind */ -type f -print > /tmp/test/list1
, e desde que você marcou com linux até mesmo isso do que ser reduzido ainda mais parafind */ -type f > /tmp/test/list1
. Mas isso vai quebrar em nomes de arquivos estranhos (mas legais).$( … )
los. Mas mesmo isso irá quebrar com nomes de arquivos contendo espaços e outros caracteres especiais.Use else if, também conhecido como elif no bash, por exemplo: