diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java
index 6b1de74..0d40987 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java
@@ -42,6 +42,9 @@
     /** if null file handles should be allowed. If they are allowed, it means treat it as a success. */
     private boolean allowNulls = false;
 
+    /** Allow that a single one of the files can make the rule to pass. */
+    private boolean satisfyAny;
+
     // check the file for the specific condition
     /**
      * Check one file.
@@ -82,32 +85,46 @@
             }
         }
 
-        // if anything was found, log it with the optional message.
-        if ( !failures.isEmpty() )
+        if ( satisfyAny )
         {
-            String message = getMessage();
-            
-            StringBuilder buf = new StringBuilder();
-            if ( message != null )
+            int passed = files.length - failures.size();
+            if ( passed == 0 )
             {
-                buf.append( message + System.lineSeparator() );
+                fail( failures );
             }
-            buf.append( getErrorMsg() );
-
-            for ( File file : failures )
-            {
-                if ( file != null )
-                {
-                    buf.append( file.getAbsolutePath() + System.lineSeparator() );
-                }
-                else
-                {
-                    buf.append( "(an empty filename was given and allowNulls is false)" + System.lineSeparator() );
-                }
-            }
-
-            throw new EnforcerRuleException( buf.toString() );
         }
+        // if anything was found, log it with the optional message.
+        else if ( !failures.isEmpty() )
+        {
+            fail( failures );
+        }
+    }
+
+    private void fail( List<File> failures )
+            throws EnforcerRuleException
+    {
+        String message = getMessage();
+
+        StringBuilder buf = new StringBuilder();
+        if ( message != null )
+        {
+            buf.append( message + System.lineSeparator() );
+        }
+        buf.append( getErrorMsg() );
+
+        for ( File file : failures )
+        {
+            if ( file != null )
+            {
+                buf.append( file.getAbsolutePath() + System.lineSeparator() );
+            }
+            else
+            {
+                buf.append( "(an empty filename was given and allowNulls is false)" + System.lineSeparator() );
+            }
+        }
+
+        throw new EnforcerRuleException( buf.toString() );
     }
 
     @Override
@@ -168,4 +185,14 @@
     {
         this.allowNulls = allowNulls;
     }
+
+    public boolean isSatisfyAny()
+    {
+        return satisfyAny;
+    }
+
+    public void setSatisfyAny( boolean satisfyAny )
+    {
+        this.satisfyAny = satisfyAny;
+    }
 }
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java
index 3ddd941..2cbe663 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java
@@ -136,6 +136,34 @@
         rule.execute( EnforcerTestUtils.getHelper() );
     }
 
+    @Test
+    public void testFileDoesNotExistSatisfyAny()
+            throws IOException
+    {
+        File f = File.createTempFile( "junit", null, temporaryFolder );
+        f.delete();
+
+        assertFalse( f.exists() );
+
+        File g = File.createTempFile( "junit", null, temporaryFolder );
+
+        assertTrue( g.exists() );
+
+        rule.setFiles( new File[] { f, g.getCanonicalFile() } );
+        rule.setSatisfyAny(true);
+
+        try
+        {
+            rule.execute( EnforcerTestUtils.getHelper() );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            fail( "Unexpected Exception:" + e.getLocalizedMessage() );
+        }
+
+        g.delete();
+    }
+
     /**
      * Test id.
      */
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java
index 3a35a73..91a386b 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java
@@ -22,6 +22,7 @@
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.io.File;
+import java.io.IOException;
 
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.junit.jupiter.api.Test;
@@ -121,6 +122,34 @@
 
     }
 
+    @Test
+    public void testFileExistsSatisfyAny()
+            throws IOException
+    {
+        File f = File.createTempFile( "junit", null, temporaryFolder );
+        f.delete();
+
+        assertFalse( f.exists() );
+
+        File g = File.createTempFile( "junit", null, temporaryFolder );
+
+        assertTrue( g.exists() );
+
+        rule.setFiles( new File[] { f, g.getCanonicalFile() } );
+        rule.setSatisfyAny(true);
+
+        try
+        {
+            rule.execute( EnforcerTestUtils.getHelper() );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            fail( "Unexpected Exception:" + e.getLocalizedMessage() );
+        }
+
+        g.delete();
+    }
+
     /**
      * Test id.
      */
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java
index 83e9184..a19383e 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java
@@ -165,6 +165,33 @@
         }
     }
 
+    @Test
+    public void testRequireFilesSizeSatisfyAny()
+            throws IOException
+    {
+        File f = File.createTempFile( "junit", null, temporaryFolder );
+        try ( BufferedWriter out = new BufferedWriter( new FileWriter( f ) ) )
+        {
+            out.write( "123456789101112131415" );
+        }
+        assertTrue( f.length() > 10 );
+
+        File g = File.createTempFile( "junit", null, temporaryFolder );
+
+        rule.setFiles( new File[] { f, g } );
+        rule.setMaxsize( 10 );
+        rule.setSatisfyAny(true);
+
+        try
+        {
+            rule.execute( EnforcerTestUtils.getHelper() );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            fail( "Unexpected Exception:" + e.getLocalizedMessage() );
+        }
+    }
+
     /**
      * Test id.
      */
