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 find
ouls
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 FILE
para 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 uniq
para não obter duplicatas e, em seguida, copiar.
Por exemplo
cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR