Diferentes opções:
mdfind -onlyin . 'kMDItemContentTypeTree=public.movie||kMDItemContentTypeTree=public.image' | parallel cp {} /tmp/{/}
- paralelo pode ser instalado com
brew install parallel -
{/}é o nome de base
find . -iname \*.mkv -o -iname \*.jpg | while IFS= read -r f; do cp "$f" /tmp/"${f%%*/}"; done
- leia os caracteres das faixas no IFS desde o início e o fim das linhas
-
read -rdesativa a interpretação de barras invertidas -
${f%%*/}remove o padrão*/mais longo desde o início
shopt -s globstar extglob nocaseglob; for f in **/*.@(mkv|jpg); do cp "$f" "/tmp/${f%%*/}"; done
-
globstar(adicionado no bash 4.0) faz com que**combine vários níveis de diretórios -
extglobadiciona suporte para@(pat1|pat2)(exatamente um) -
nocaseglobtorna globs insensíveis a maiúsculas e minúsculas
f() { cp "$1" "/tmp/${1%%*/}"; }; export -f f; gfind . -regextype posix-extended -iregex '.*\.(mkv|jpg)' -print0 | xargs -0 -n1 bash -c 'f "$1"' _
- O find do OS X não suporta regex estendida, então o comando usa o GNU find
-
export -febash -csão necessários para executar a função com xargs -
xargs -n1recebe um argumento de cada vez