se encontrar ext então cp diretório pai senão echo não encontrado

se encontrar ext então cp diretório pai senão echo não encontrado

Até agora eu descobri isso.

if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
        echo 1
else
        echo 0
fi

Mas o que eu gostaria de fazer é copiar o diretório pai do arquivo encontrado para outro local.

Tenho a sensação de que deveria apenas usar o comando find.

Responder1

A resposta do fede.evol falha se os caminhos contiverem espaços em branco. A saída de findouls não deve ser usado em uma substituição de comando.

A maneira correta de lidar com todos os nomes de arquivos (exceto caminhos com novas linhas) seria:

find /somewhere -name "*.mkv" -exec dirname {} \; | uniq | \
while IFS= read -r dir; do echo cp -- "$dir" /other/; done

Dessa forma, cada pasta /somewhereé copiada para /other/. Observe que a barra final é obrigatória, caso contrário o alvo seria sempre sobrescrito.

Responder2

Use dirname FILEpara obter o nome do diretório de um determinado arquivo. Então, por exemplo:

find DIRECTORY -name "*.mkv" -exec dirname {} \;

Fornecerá todos os diretórios com um MKV em DIRETÓRIO. Então você pode passá-los uniqpara não obter duplicatas e, em seguida, copiar.

Por exemplo

cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR

informação relacionada