Comtesting si un file o carpeta ya ha sido parcheado

¿Es posible saber si un file ya ha sido parcheado antes de aplicar el parche?

Necesito hacer esto en un guión, ¿algún pensamiento?

En caso de que ayude a alguien, si está utilizando script bash, entonces el ejemplo dado por Omnifarious no funcionaría. En bash, el estado de salida de un command exitoso es 0

Entonces, lo siguiente funcionaría:

patch -p0 -N --dry-run --silent < patchfile 2>/dev/null #If the patch has not been applied then the $? which is the exit status #for last command would have a success status code = 0 if [ $? -eq 0 ]; then #apply the patch patch -p0 -N < patchfile fi 

Sí, simplemente ejecute el patch con la opción --dry-run , fallará o tendrá éxito, lo cual se puede descubrir con su estado de salida.

Pero en una forma más común (y propensa a errores) , probablemente tenga que ejecutarlo con la opción -R , que significa "revertir", ya que solo si podía revertir todo el parche, podría considerarse como "aplicado". De lo contrario (sin '-R') podría fallar debido a que algunas partes del file original fueron cambiadas. A continuación se muestra un ejemplo simple:

 if ! patch -R -p0 -s -f --dry-run <patchfile; then patch -p0 <patchfile fi 

(Aún más, en el fragment anterior quizás prefiera silenciar el patch networkingirigiendo completamente su stdout y stderr a /dev/null )

Aquí hay una suposition, suponiendo que está usando la utilidad de patch y cada file que va a parchear tiene su propio parche:

 if nohup patch <options> -N --dry-run --silent <patchfile 2>/dev/null; then echo The file has not had the patch applied, echo and the patch will apply cleanly. else echo The file may not have had the patch applied. echo Or maybe the patch doesn't apply to the file. fi