diff --git a/util.go b/util.go
index 84856c4..e757867 100644
--- a/util.go
+++ b/util.go
@@ -173,7 +173,7 @@
 	return FileContainsBytes(a.Fs, filename, subslice)
 }
 
-// Check if a file contains a specified string.
+// Check if a file contains a specified byte slice.
 func FileContainsBytes(fs Fs, filename string, subslice []byte) (bool, error) {
 	f, err := fs.Open(filename)
 	if err != nil {
@@ -181,17 +181,44 @@
 	}
 	defer f.Close()
 
-	return readerContains(f, subslice), nil
+	return readerContainsAny(f, subslice), nil
 }
 
-// readerContains reports whether subslice is within r.
-func readerContains(r io.Reader, subslice []byte) bool {
+func (a Afero) FileContainsAnyBytes(filename string, subslices [][]byte) (bool, error) {
+	return FileContainsAnyBytes(a.Fs, filename, subslices)
+}
 
-	if r == nil || len(subslice) == 0 {
+// Check if a file contains any of the specified byte slices.
+func FileContainsAnyBytes(fs Fs, filename string, subslices [][]byte) (bool, error) {
+	f, err := fs.Open(filename)
+	if err != nil {
+		return false, err
+	}
+	defer f.Close()
+
+	return readerContainsAny(f, subslices...), nil
+}
+
+// readerContains reports whether any of the subslices is within r.
+func readerContainsAny(r io.Reader, subslices ...[]byte) bool {
+
+	if r == nil || len(subslices) == 0 {
 		return false
 	}
 
-	bufflen := len(subslice) * 4
+	largestSlice := 0
+
+	for _, sl := range subslices {
+		if len(sl) > largestSlice {
+			largestSlice = len(sl)
+		}
+	}
+
+	if largestSlice == 0 {
+		return false
+	}
+
+	bufflen := largestSlice * 4
 	halflen := bufflen / 2
 	buff := make([]byte, bufflen)
 	var err error
@@ -209,8 +236,12 @@
 			n, err = io.ReadAtLeast(r, buff[halflen:], halflen)
 		}
 
-		if n > 0 && bytes.Contains(buff, subslice) {
-			return true
+		if n > 0 {
+			for _, sl := range subslices {
+				if bytes.Contains(buff, sl) {
+					return true
+				}
+			}
 		}
 
 		if err != nil {
diff --git a/util_test.go b/util_test.go
index d3dcdd1..50763df 100644
--- a/util_test.go
+++ b/util_test.go
@@ -142,28 +142,31 @@
 func TestReaderContains(t *testing.T) {
 	for i, this := range []struct {
 		v1     string
-		v2     []byte
+		v2     [][]byte
 		expect bool
 	}{
-		{"abc", []byte("a"), true},
-		{"abc", []byte("b"), true},
-		{"abcdefg", []byte("efg"), true},
-		{"abc", []byte("d"), false},
+		{"abc", [][]byte{[]byte("a")}, true},
+		{"abc", [][]byte{[]byte("b")}, true},
+		{"abcdefg", [][]byte{[]byte("efg")}, true},
+		{"abc", [][]byte{[]byte("d")}, false},
+		{"abc", [][]byte{[]byte("d"), []byte("e")}, false},
+		{"abc", [][]byte{[]byte("d"), []byte("a")}, true},
+		{"abc", [][]byte{[]byte("b"), []byte("e")}, true},
 		{"", nil, false},
-		{"", []byte("a"), false},
-		{"a", []byte(""), false},
-		{"", []byte(""), false}} {
-		result := readerContains(strings.NewReader(this.v1), this.v2)
+		{"", [][]byte{[]byte("a")}, false},
+		{"a", [][]byte{[]byte("")}, false},
+		{"", [][]byte{[]byte("")}, false}} {
+		result := readerContainsAny(strings.NewReader(this.v1), this.v2...)
 		if result != this.expect {
 			t.Errorf("[%d] readerContains: got %t but expected %t", i, result, this.expect)
 		}
 	}
 
-	if readerContains(nil, []byte("a")) {
+	if readerContainsAny(nil, []byte("a")) {
 		t.Error("readerContains with nil reader")
 	}
 
-	if readerContains(nil, nil) {
+	if readerContainsAny(nil, nil) {
 		t.Error("readerContains with nil arguments")
 	}
 }
