diff --git a/gnu/local.mk b/gnu/local.mk
index 2ea9806b7e..24103a4da7 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1114,6 +1114,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch	\
   %D%/packages/patches/dstat-skip-devices-without-io.patch	\
   %D%/packages/patches/dtc-meson-cell-overflow.patch		\
+  %D%/packages/patches/duc-fix-test-sh.patch                    \
   %D%/packages/patches/dune-common-skip-failing-tests.patch	\
   %D%/packages/patches/dune-grid-add-missing-include-cassert.patch	\
   %D%/packages/patches/dune-istl-fix-solver-playground.patch	\
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index b0117d77ce..ea18a98ab6 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -1562,7 +1562,9 @@ (define-public duc
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0sglcn38rgn6y3m5ahngizyn3x2rzhqjphs7g0ppnlinkz56rcv4"))))
+                "0sglcn38rgn6y3m5ahngizyn3x2rzhqjphs7g0ppnlinkz56rcv4"))
+              (patches
+               (search-patches "duc-fix-test-sh.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/patches/duc-fix-test-sh.patch b/gnu/packages/patches/duc-fix-test-sh.patch
new file mode 100644
index 0000000000..8b79e4bd03
--- /dev/null
+++ b/gnu/packages/patches/duc-fix-test-sh.patch
@@ -0,0 +1,70 @@
+From a84835e481d9b5fcfc101bb1fa5aba38a245b6f3 Mon Sep 17 00:00:00 2001
+Message-ID: <a84835e481d9b5fcfc101bb1fa5aba38a245b6f3.1711177846.git.vivien@planete-kraus.eu>
+From: Fabio Natali <me@fabionatali.com>
+Date: Wed, 30 Aug 2023 11:35:40 +0100
+Subject: [PATCH] Fix test.sh which used to fail in some circumstances
+
+duc's behaviour may legitimately vary depending on the system it is being run
+on. The test.sh script used to fail in some circumstances as it was too strict
+and it did not account for some legitimate behaviour differences.
+
+Fix: update `test.sh' variable
+---
+
+This is a squash of pull request https://github.com/zevv/duc/pull/318,
+waiting to be merged.
+
+ test.sh | 22 ++++++++++++++++------
+ 1 file changed, 16 insertions(+), 6 deletions(-)
+
+diff --git a/test.sh b/test.sh
+index eb592be..7668499 100755
+--- a/test.sh
++++ b/test.sh
+@@ -130,8 +130,8 @@ fi
+ # Actual tests are below.  If you add test cases above, these need to be tweaked.
+ #---------------------------------------------------------------------------------
+ 
+-
+-cat ${DUC_TEST_DIR}.out | grep -q "Indexed 77 files and 47 directories, (91869B apparent, 540672B actual)"
++# An exact match is expected on the apparent size; the actual size may vary.
++cat ${DUC_TEST_DIR}.out | grep -q "Indexed 77 files and 47 directories, (91869B apparent, [0-9]*B actual)"
+ 
+ if [ "$?" = "0" ]; then
+ 	echo "report: ok"
+@@ -153,16 +153,26 @@ if [ "$?" != "0" ]; then
+ 	exit 1
+ fi
+ 
+-testsum="33e2be27a9e70e81d4006a2d7b555948"
++# When two or more hard links point to the same file and when running duc with
++# the `--check-hard-links' option, only one of the hard links will be
++# counted. However, duc may pick up and display a different hard link depending
++# on the system it is being run on. Since our tests include three hard links to
++# the same file, we should be expecting three possible outcomes, all equally
++# valid, each corresponding to one of the following MD5 checksums.
++testsum0="78dbf880ef6917ea665fddb5ebb44428"
++testsum1="38ab7b7d1ec6ac57d672c5618371386d"
++testsum2="33e2be27a9e70e81d4006a2d7b555948"
+ md5sum ${DUC_TEST_DIR}.out > /tmp/.duc.md5sum
+-grep -q $testsum /tmp/.duc.md5sum
++grep -q "$testsum0\|$testsum1\|$testsum2" /tmp/.duc.md5sum
+ 
+ if [ "$?" = "0" ]; then
+ 	echo "md5sum: ok"
+ else
+ 	echo "md5sum: failed"
+-	echo "expected: "
+-	echo "$testsum  ${DUC_TEST_DIR}.out"
++	echo "expected one of: "
++	echo "$testsum0  ${DUC_TEST_DIR}.out"
++	echo "$testsum1  ${DUC_TEST_DIR}.out"
++	echo "$testsum2  ${DUC_TEST_DIR}.out"
+ 	echo "got: "
+ 	cat /tmp/.duc.md5sum
+ 	exit 1
+
+base-commit: b8f9659688a38476df9f613be3342bb8e2d65402
+-- 
+2.41.0
+
