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 -r
desativa 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 -
extglob
adiciona suporte para@(pat1|pat2)
(exatamente um) -
nocaseglob
torna 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 -f
ebash -c
são necessários para executar a função com xargs -
xargs -n1
recebe um argumento de cada vez