como renomear e mover arquivos de acordo com os nomes dos diretórios?

0

Eu tenho muitos diretórios contendo o arquivo com o mesmo nome. Eu quero mover esses arquivos para outro diretório e, ao mesmo tempo, renomeá-los com o nome do diretório para que eles sejam diferenciados e não sejam sobrepostos.

EDITAR: Todos os diretórios estão no mesmo diretório. O destino é um diretório no sistema que pode ser qualquer coisa. Nós lemos o diretório e lemos o arquivo e o renomeia exatamente como o nome do diretório e o colocamos no destino.

Uma restrição importante é que o nome do arquivo seja fornecido, o qual estará em todos os diretórios. Diretórios podem conter outros arquivos e também o que é dado

Muito obrigado

    
por Shan 15.04.2012 / 00:49

2 respostas

1

Supondo que o nome do arquivo desses arquivos seja thefilename , você tenha cd ed para o diretório que contém esses diretórios e deseja movê-los para /path/to/dest , o seguinte shell deve fazer o truque

for file in */thefilename; do
    echo mv -iv "./$file" "/path/to/dest/${file%/*}"
done

Você pode executá-lo diretamente em um shell interativo ou colocá-lo em um arquivo e executá-lo como um script.

Eu adicionei um echo para torná-lo apenas imprimir os comandos mv. Se a saída parecer correta, remova o echo e execute-o novamente para que ele realmente faça o movimento.

    
por geirha 15.04.2012 / 01:33
1

Se você usar o bash, poderá fazer o seguinte:

$ for i in *WhatEverMatchesYourOriginalDirectories*
do
  cd $i
  for j in *
  do
    mv $j ../Target/${i}-${j}
  done
  cd ..
done

Isso moverá todos os arquivos nos diretórios correspondidos pelo primeiro curinga no diretório de destino.

    
por G. He 15.04.2012 / 01:33