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
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.
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