Substituir parte do nome do arquivo pelo nome do diretório

1

Eu tenho pastas com o nome ACB* e entre vários outros arquivos, alguns arquivos chamados scanAC_*

Eu quero excluir a parte chamada scanAC e substituí-la pelo nome do diretório em que ela está.

Por exemplo, o diretório ACB_200315 contém o arquivo scanAC_typefile_2S.dcm , eu quero que o lastfile se torne ACB_200315_typefile_2S.dcm

O que eu tentei agora (Linux, SSH, renomear opção não disponível) mas não funciona:

for i in ACB*; do
cd ${i}
  mv scanID* ${i/scanID/${PWD##*/}};
cd ..
done
    
por SSK 28.01.2016 / 10:11

2 respostas

0

Trabalhei usando o script a seguir, adaptado ao fornecido por Costas, que não funcionou no começo:

for d in ACB*; do
  cd ${d}
    for f in scanID*; do
    mv "${f}" "${d}${f#scanID}" 
    done
  cd ..
done
    
por 28.01.2016 / 11:43
0

Para o script "par de arquivos", é necessário modificar um pouco

for d in ACB* ; do
    for f in ${d}/scanID* ; do
        mv "${f}" "${f/scanID/${d}}"
       #mv "${f}" "${d}/${d}${f#*scanID}"
    done
done

Ou use encontrar em vez

find ACB* -name 'scanID*' -exec bash -c 'mv "$0" ""${0/scanID/${0%\/*}}"' {} \;
    
por 28.01.2016 / 10:41

Tags