¿Alguien puede ayudarme con un patrón de coincidencia de archivos de línea de comandos relativamente complejo?
Tengo archivos en un directorio de la siguiente manera:
1.png
1_thumb.png
1-1.png
1-1_thumb.png
1-2.png
1-2_thumb.png
2.png
2_thumb.png
2-1.png
2-1_thumb.png
3.png
3_thumb.png
3-1_thumb.png
Quiero enumerar todos los archivos que no tienen una copia con el mismo nombre de archivo en -1
algún lugar. Entonces, en el ejemplo anterior, los resultados serían 3.png
.
NB: el archivo y su copia con "-1" tendrán el mismo tamaño de archivo, si eso ayuda.
¿Alguien puede sugerir cómo hacer esto?
Respuesta1
Suponiendo que todos los archivos -n
son una copia y que tampoco desea los pulgares, esto funciona en KornShell (ksh) y también en Bash con la extglob
opción establecida ( shopt -s extglob
):
for f in !(*_thumb.png|*-[1-9].png); do
g=${f%.png}-1.png
test -f $g || echo $f
done
Respuesta2
Si solo es "-1" lo que determina que es una copia, entonces tampoco tienes ninguna copia de tus archivos 2-1.png o 2-1_thumb.png. Si ese es su criterio de coincidencia y desea que también se prueben los pulgares, puede hacerlo
for i in `ls |grep -v "\-1" | cut -f1 -d.`; do
if `echo $i | grep thumb > /dev/null`; then
test -f `echo $i.png | sed 's/_/-1_/g'` || echo $i.png;
else
test -f $i-1.png || echo $i.png;
fi;
done
De lo contrario, si los pulgares no cuentan, la respuesta de KAK debería ser adecuada.