Я хотел бы запустить следующий код:
find 2017_01_04/* -maxdepth 1 -mindepth 1 -type f -exec sh -c\
'file -i $1\ | awk "{/video|audio/} {print \$1}" ' _ {} \; -print0 | \
while read -d $'\0' -r i
echo $i
done
Вывод команды file -i
это:
20170115_202630: image/jpeg; charset=binary
20170115_202630.jpg: image/jpeg; charset=binary
20171006_204647000_iOS.MOV: video/quicktime; charset=binary
Ei*foto.jpg: image/jpeg; charset=binary
err-organiza_fotos (cópia).log: text/plain; charset=utf-8
err-organiza_fotos.log: text/plain; charset=utf-8
err-organiza_fotos (outra cópia).log: text/plain; charset=utf-8
Команда выше работает отлично! Но когда внутри find ... -exec sh -c '... | awk ...' _ {} \; -print0 | while ...; do ...; done
не работает. Перепробовал все, что знаю, безуспешно.
file -i * | awk -F ":" '/image|video/ {print $1}'
Моя цель - найти файлы и выбрать только файлы определенного типа, не проверяя расширения, потому что, например, существуют файлы изображений без расширений. И я должен использовать find, потому что он лучше работает с файлами с разными именами, такими как ./ASD '[]ª\.*
. И, наконец, я хотел бы, чтобы все было в одной команде, я знаю, что это возможно, используя силу awk и find.