set root="/path/to/drobo/root/folder"
find "$root" -type f | while read -r pathname
do
ffmpeg -i "$pathname" -acodec copy -vcodec copy -f avi -y /dev/null 2>/dev/null || echo rm "'$pathname'" >>deletions
done
root="/path/to/drobo/root/folder"
find "$root" -type f | while read -r pathname
do
ffmpeg -i "$pathname" -acodec copy -vcodec copy -f avi -y /dev/null 2>/dev/null || echo rm "'$pathname'" >>deletions
done
root="/path/to/drobo/root/folder"
filecount=$(find "$root" -type f | wc -l)
processed=0
find "$root" -type f | while read -r pathname
do
ffmpeg -i "$pathname" -acodec copy -vcodec copy -f avi -y /dev/null 2>/dev/null || echo rm "'$pathname'" >>deletions
echo -n ' ' $((++processed)) / $filecount $'\r'
done
root="/path/to/drobo/root/folder"
export filecount=$(find "$root" -type f | wc -l)
find "$root" -type f | {
processed=0
corrupt=0
while read -r pathname
do
ffmpeg -i "$pathname" -acodec copy -vcodec copy -f avi -y /dev/null 2>/dev/null || { echo rm "'$pathname'" >>deletions; let ++corrupt }
echo -n ' ' $((++processed)) / $filecount, $corrupt $'bad\r'
done
}
root="/path/to/drobo/root/folder"
filecount=$(find "$root" -type f | wc -l)
find "$root" -type f | {
processed=0
corrupt=0
while read -r pathname
do
if ! ffmpeg -i "$pathname" -acodec copy -vcodec copy -f avi -y /dev/null 2>/dev/null
then
let ++corrupt
echo rm "'$pathname'" >>deletions
fi
echo -n ' ' $((++processed)) / $filecount, $corrupt $'bad\r'
done
}
root="/path/to/drobo/root/folder"
filecount=$(find "$root" -type f | wc -l)
find "$root" -type f | {
processed=0
corrupt=0
while read -r pathname
do
if ! ffmpeg -i "$pathname" -acodec copy -vcodec copy -f avi -y /dev/null 2>/dev/null
then
let ++corrupt
printf 'rm %q\n' "$pathname" >>deletions
fi
echo -n ' ' $((++processed)) / $filecount, $corrupt $'bad\r'
done
}
rm deletions before you start, as this code will only append to it, never empty it.
root="/path/to/drobo/root/folder"
extensions="mov avi mpg mpeg flv etc"
i=0
unset filter
for extension in $extensions
do
filter[i++]=-o
filter[i++]=-iname # change -iname to -name if you want case-sensitive matching
filter[i++]="*.$extension"
done
filter[0]='('
filter[i]=')'
filecount=$(find "$root" -type f "${filter[@]}" | wc -l)
find "$root" -type f "${filter[@]}" | {
processed=0
corrupt=0
while read -r pathname
do
if ! ffmpeg -i "$pathname" -acodec copy -vcodec copy -f avi -y /dev/null 2>/dev/null
then
let ++corrupt
printf 'rm %q\n' "$pathname" >>deletions
fi
echo -n ' ' $((++processed)) / $filecount, $corrupt $'bad\r'
done
}
$'bad\r' to $'bad\n', so you get a proper line break after each progress indicator; and remove 2>/dev/null from the ffmpeg line. That way, you'll see a bunch of ffmpeg spew that should help work out what its problem is.
posted by rr at 10:41 PM on January 16, 2010