diff --git a/src/js/_enqueues/admin/media.js b/src/js/_enqueues/admin/media.js
index 13d46e485b..f0e2a8731d 100644
--- a/src/js/_enqueues/admin/media.js
+++ b/src/js/_enqueues/admin/media.js
@@ -205,5 +205,21 @@
 		$( '.find-box-inside' ).on( 'click', 'tr', function() {
 			$( this ).find( '.found-radio input' ).prop( 'checked', true );
 		});
+
+		// Handles media list copy media URL button
+		$( '.copy-attachment-url' ).click( function() {
+			const clipboard = new ClipboardJS( '.copy-attachment-url' );
+			const targetElement = $( this );
+			clipboard.on( 'success', function( e ) {
+				// Show visual success
+				$( targetElement ).text( wp.i18n.__( 'Copied' ) );
+				// Announce success
+				wp.a11y.speak( wp.i18n.__( 'The file URL has been copied to your clipboard' ) );
+				// Clear the visual success queue after 3 seconds
+				setTimeout( function() {
+					$( targetElement ).text( wp.i18n.__( 'Copy URL' ) );
+				}, 3000 );
+			});
+		});
 	});
 })( jQuery );
diff --git a/src/wp-admin/includes/class-wp-media-list-table.php b/src/wp-admin/includes/class-wp-media-list-table.php
index d425bccfbf..98128c7f87 100644
--- a/src/wp-admin/includes/class-wp-media-list-table.php
+++ b/src/wp-admin/includes/class-wp-media-list-table.php
@@ -806,6 +806,14 @@ class WP_Media_List_Table extends WP_List_Table {
 					esc_attr( sprintf( __( 'View &#8220;%s&#8221;' ), $att_title ) ),
 					__( 'View' )
 				);
+
+				$actions['copy'] = sprintf(
+					'<button type="button" class="button copy-attachment-url list-media" data-clipboard-text="%s" aria-label="%s">%s</button>',
+					esc_url( wp_get_attachment_url( $post->ID ) ),
+					/* translators: %s: Attachment title. */
+					esc_attr( sprintf( __( 'Copy URL &#8220;%s&#8221;' ), $att_title ) ),
+					__( 'Copy URL' )
+				);
 			}
 		}
 
diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php
index 8313088e67..3322406d8c 100644
--- a/src/wp-includes/script-loader.php
+++ b/src/wp-includes/script-loader.php
@@ -1351,7 +1351,7 @@ function wp_default_scripts( $scripts ) {
 		$scripts->add( 'list-revisions', "/wp-includes/js/wp-list-revisions$suffix.js" );
 
 		$scripts->add( 'media-grid', "/wp-includes/js/media-grid$suffix.js", array( 'media-editor' ), false, 1 );
-		$scripts->add( 'media', "/wp-admin/js/media$suffix.js", array( 'jquery' ), false, 1 );
+		$scripts->add( 'media', "/wp-admin/js/media$suffix.js", array( 'jquery', 'clipboard', 'wp-i18n', 'wp-a11y' ), false, 1 );
 		$scripts->set_translations( 'media' );
 
 		$scripts->add( 'image-edit', "/wp-admin/js/image-edit$suffix.js", array( 'jquery', 'jquery-ui-core', 'json2', 'imgareaselect', 'wp-a11y' ), false, 1 );
