Copie todas as pastas que contêm arquivo (s) com a extensão dada

0

Em um Mac Terminal, quero encontrar todos os diretórios que contenham pelo menos um arquivo com a extensão especificada e copiá-los em outro lugar. Eu encontrei find . -iname '*.jpg' -exec dirname {} \; , que parece encontrar todos os diretórios contendo um arquivo *.jpg , mas não tenho certeza de como copiá-los. Eu tentei combiná-lo com rsync , mas não consegui fazê-lo funcionar. Qual é a melhor maneira de fazer isso?

    
por Dominik Novák 21.02.2018 / 19:08

2 respostas

0

Aqui está um liner de bash friendly que copia qualquer pasta que tenha um jpg dentro deles em uma pasta chamada backup enquanto mantém a estrutura de diretórios

mkdir backup; for folder in $(find . -type f -name '*.jpg' | sed -r 's|/[^/]+$||' |sort |uniq); do cp -r --parents $folder backup; done

Primeiro, cria uma pasta vazia backup , em seguida, o comando find procura todos os arquivos no diretório atual que terminam com .jpg . Os comandos sed , sort e uniq ajustam a saída de localização apenas para os nomes de diretório e removem as repetições. Finalmente, o cp -r --parents em um loop copia as pastas recursivamente enquanto cria arquivos que estão faltando.

você pode contornar usando sed -r usando o -printf flag com find , assim

mkdir backup; for folder in $(find . -type f -name '*.jpg' -printf "%h\n" |sort |uniq); do cp -r --parents $folder backup; done

se o seu find não suportar -printf , você pode tentar usar grep

mkdir backup; for folder in $(find . -type f -name '*.jpg' | grep -o "\(.*\)/" |sort |uniq); do cp -r --parents $folder backup; done
    
por 21.02.2018 / 20:49
0

Para encontrar todos os arquivos com a extensão .py , isso deve funcionar nos shells do OS X:

find . *.py -print0 | xargs -0 -I{} cp -r {} /some/dir/name/

Nota:

  • find -print0 imprime arquivos terminados com um caractere nulo em vez de uma nova linha e xargs -0 é usado para entrada nesse formato. Isso é para melhor lidar com nomes de arquivos e caminhos que têm espaços ou outros espaços em branco, que muitas vezes é uma dor de cabeça.
  • O OS X usa versões diferentes de find e cp do que o Linux / GNU, portanto, o exemplo this funcionaria com utilitários GNU, muitos exemplos ou respostas para perguntas semelhantes que usam utilitários GNU não funciona no OS X.
por 21.02.2018 / 21:23