se encontrar ext então cp pai dir else echo não encontrado

1

Até agora eu vim com 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 devo usar o comando "Localizar".

    
por David Custer 04.12.2013 / 09:19

2 respostas

1

A resposta de fede.evol falha se os caminhos contiverem espaços em branco. A saída de find ou ls não deve ser usada 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 de /somewhere é copiada para /other/ . Observe que a barra final é obrigatória, porque senão o alvo sempre seria sobrescrito.

    
por 06.12.2013 / 10:50
1

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

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

Dará a você todos os diretórios com um MKV sob DIRETÓRIO. Então você pode passá-los através de uniq para não receber duplas e, em seguida, no caso de cópia.

Por exemplo

cp -a 'find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq' DESTDIR
    
por 04.12.2013 / 15:55

Tags