Precisa copiar os arquivos para o diretório existente e remover os arquivos que já estão lá com o mesmo nome, mas extensões diferentes

2

EDITAR: Reescrita total da pergunta para maior clareza.

Eu tenho uma árvore de diretórios ( new ) com um monte de arquivos com uma extensão de .new . Eu tenho uma árvore idêntica ( antiga ) onde muitos dos arquivos têm nomes idênticos aos da árvore new , exceto que a extensão é .old . Eu gostaria de copiar todos os arquivos .new da árvore de diretórios new para a árvore de diretórios antiga que contém os arquivos .old . Como um arquivo com uma extensão .new é gravado na árvore de diretórios antiga , eu gostaria de excluir qualquer arquivo com o mesmo nome, mas com uma extensão .old .

Assim, se na árvore de diretórios new houver um arquivo chamado new/foo/bar/file.new , ele será copiado para a árvore de diretórios antigo como old/foo/bar/file.new e, em seguida o arquivo old/foo/bar/file.old será excluído se sair.

EDIT # 1

Esta resposta foi discutida abaixo (usando a velha questão que tinha informações externas estranhas). Veja a solução real que trabalhei abaixo como uma das respostas.

    
por William Everett 27.10.2013 / 17:35

2 respostas

3

Esta foi a resposta final que foi encontrada nos comentários da resposta de terdons.

cd new
for i in */*/*.new; do cp "$i" "path/to/old/${i}" && rm "path/to/old/${i//new/old}"; done
    
por 28.10.2013 / 16:38
6

A abordagem básica seria executar isso a partir do diretório que contém os arquivos mp3:

for i in *.mp3; do cp "$i" /path/to/flac/ && rm path/to/flac/"${i%.*}".flac; done

Isso passa por todos os arquivos cujo nome termina em .mp3 , copia cada um para /path/to/flac/ , que deve ser o diretório que contém os arquivos flac e se a cópia foi bem-sucedida , exclui o% co_de correspondente % Arquivo. O truque é usar os recursos de do shell, .flac removerá a extensão, então ${i%.*} excluirá o arquivo que tem o mesmo nome do arquivo mp3 atual, mas uma extensão rm ${i%.*}.flac .

Para ilustrar:

$ foo='abc.def'
$ echo ${foo%.*}
abc
    
por 27.10.2013 / 19:34