Talvez um pequeno roteiro:
echo '#!/bin/bash
# Test argument
if [ $# = 1 ]; then
if [ -d $1 ]; then
cd $1
else
echo "$1 is not a directory" >&2
exit 1
fi
fi
declare f # filname
declare -i fc # file counter
declare -i fcs # file conter for a scene
declare sn # scene number
declare csn # current scene number
declare -i dfc # delete file counter
declare -i pfc # preserve file counter
# Open logfiles
exec file-delete>>&3
exec file-preserve>>&4
for f in *; do
((fc++))
sn=${f#scene}
sn=${sn%_*}
if [ "$sn" = "$csn" ]; then
((fcs++))
else
# New number scene
fcs=1
csn=$sn
dfc=0
pfc=0
echo
fi
if ((fcs > 150));then
# Candidate for deleting
echo "$f" >>&3
((dfc++))
else
# Preserve file
echo "$f" >>&4
((pfc++))
fi
# Display in console
echo -en "\r scene $csn preserve:$pfc delete:$dfc"
done
echo
# Closing logfile
exec 3>&-
exec 4>&-
echo "Files scaned : $fc"
wc -l file-delete
wc -l file-preserve
' > ~/scanfile
Para executá-lo:
bash ~/scanfile [<pathdir>]
Se for omitido, ele funcionará no diretório atual.
Ele não exclui nada, ele grava dois arquivos no diretório varrido (exclusão de arquivos e preservação de arquivos).
Após a verificação, os arquivos a serem excluídos podem ser movidos com:
[cd <pathdir>]
mkdir tmp
while read; do mv -v $REPLY tmp; done < file-delete
Se o resultado for bom, então
rm -rf tmp
rm file-delete file-preserve