Tente isto:
find folder1 -type f -iname '*.flv' -exec bash -c \
'f=${1#folder1/}; [ -f "folder2/${f%.flv}.mp4" ] ||
scripts/script.sh "${1%.flv}"' none {} \;
Isso funcionará com arquivos cujos nomes contenham espaços em branco ou outros caracteres difíceis.
Como funciona
-
find folder1 -type f -iname '*.flv'Isto encontra os arquivos flv
-
-exec bash -c '...'Para cada arquivo flv encontrado, isso diz ao find para executar o bash, que executa o script entre aspas (veja abaixo).
-
f=${1#folder1/}Isso cria uma variável
fque tem o nome do arquivo flv sem o diretório principal. -
[ -f "folder2/${f%.flv}.mp4" ]Isso testa para ver se existe um arquivo mp4 correspondente.
-
||Isto diz ao bash para executar o comando que segue somente se o comando anterior retornou false (em outras palavras, se nenhum arquivo mp4 foi encontrado).
-
scripts/script.sh "${1%.flv}"'Isso executa seu script nos arquivos flv que não possuem arquivos mp4. Os arquivos são fornecidos para
script.shcom a parte.flvremovida. -
none {}Isso diz ao bash para atribuir a string
nonea$0(esse alocador de espaço nunca é usado) e atribuir o nome do arquivo encontrado porfind, denotado{}, à variável de shell$1. -
\;Isso sinaliza o fim do comando
-execdo find.