Skip to content

Repository files navigation

PowerShell-HashCopy

Build StatusTest Coverage

This PowerShell module contains cmdlets for copying and comparing specific files between two paths, where those files have been determined to have changed via a computed hash value. This is useful if you need to sync specific file changes from one directory to another but cannot trust the modified date of the files to determine which files have been modified (for example, if the source files has been cloned from a source control system and as a result the modified dates had changed).

You should of course be confident that if there is a difference between two files, it is the copy you have specified as being in the source -Path that you want to use to overwrite the copy in the -Destination path. New files (files that exist in the source path but not in the destination) will also be copied across, including any directories in their paths that may be missing in the destination folder.

You can synchronise an entire directory tree by using the -Recurse parameter.

Installation

The module is published in the PSGallery, so if you have PowerShell 5 or newer can be installed by running:

Install-Module HashCopy -Scope CurrentUser

Usage

Copy-FileHash

You can use the Copy-FileHash cmdlet to sync a single path by providing it with -Path and -Destination parameters:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

This will compute the hash for all files in each directory (and all sub-directories, due to -Recurse) via the Get-FileHash cmdlet and then will copy any changed and new files from the source path to the destination path.

You can include all the sub-folders of the source -Path by adding -Recurse:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can specify a -LiteralPath instead of a Path if you want to avoid wildcard characters from being interpreted as such:

Copy-FileHash -LiteralPath C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can remove files from the Destination path that are not in the Source path by adding -Mirror:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Mirror

You can have the destination file objects returned by adding -PassThru:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse -PassThru

You can Force the overwrite of read-only files in the Destination path by adding -Force:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Force

You can specify the algorithm that Get-FileHash uses to create the Hash by using -Algorithm:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Algorithm MD5

Valid -Algorithm values are: SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160.

Compare-FileHash

If you'd like to check which files will be copied from a source path before actually using Copy-FileHash, you can use Compare-FileHash. This cmdlet outputs file objects for any new or modified file having performed the same comparison as the Copy- cmdlet (e.g via using Get-FileHash of the source and destination file to determine if they are different).

Check which files would be copied from one single directory to another:

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

Check which files would be copied between one directory tree and another (including all sub-directories):

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

As with Copy-FileHash you can use -LiteralPath instead of -Path to have paths interpreted literally.

Cmdlets

A full list of cmdlets in this module is provided below for reference. Use Get-Help <cmdlet name> with these to learn more about their usage.

CmdletDescription
Copy-FileHashCopies any files between two directory paths that are new or have changed based on computed hash value.
Compare-FileHashCompares files from one location to another based on determining change via computed hash value.

About

A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison.

Resources

Contributing

Stars

44 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - markwragg/PowerShell-HashCopy: A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison. · GitHub
Skip to content

Repository files navigation

PowerShell-HashCopy

Build StatusTest Coverage

This PowerShell module contains cmdlets for copying and comparing specific files between two paths, where those files have been determined to have changed via a computed hash value. This is useful if you need to sync specific file changes from one directory to another but cannot trust the modified date of the files to determine which files have been modified (for example, if the source files has been cloned from a source control system and as a result the modified dates had changed).

You should of course be confident that if there is a difference between two files, it is the copy you have specified as being in the source -Path that you want to use to overwrite the copy in the -Destination path. New files (files that exist in the source path but not in the destination) will also be copied across, including any directories in their paths that may be missing in the destination folder.

You can synchronise an entire directory tree by using the -Recurse parameter.

Installation

The module is published in the PSGallery, so if you have PowerShell 5 or newer can be installed by running:

Install-Module HashCopy -Scope CurrentUser

Usage

Copy-FileHash

You can use the Copy-FileHash cmdlet to sync a single path by providing it with -Path and -Destination parameters:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

This will compute the hash for all files in each directory (and all sub-directories, due to -Recurse) via the Get-FileHash cmdlet and then will copy any changed and new files from the source path to the destination path.

You can include all the sub-folders of the source -Path by adding -Recurse:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can specify a -LiteralPath instead of a Path if you want to avoid wildcard characters from being interpreted as such:

Copy-FileHash -LiteralPath C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can remove files from the Destination path that are not in the Source path by adding -Mirror:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Mirror

You can have the destination file objects returned by adding -PassThru:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse -PassThru

You can Force the overwrite of read-only files in the Destination path by adding -Force:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Force

You can specify the algorithm that Get-FileHash uses to create the Hash by using -Algorithm:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Algorithm MD5

Valid -Algorithm values are: SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160.

Compare-FileHash

If you'd like to check which files will be copied from a source path before actually using Copy-FileHash, you can use Compare-FileHash. This cmdlet outputs file objects for any new or modified file having performed the same comparison as the Copy- cmdlet (e.g via using Get-FileHash of the source and destination file to determine if they are different).

Check which files would be copied from one single directory to another:

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

Check which files would be copied between one directory tree and another (including all sub-directories):

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

As with Copy-FileHash you can use -LiteralPath instead of -Path to have paths interpreted literally.

Cmdlets

A full list of cmdlets in this module is provided below for reference. Use Get-Help <cmdlet name> with these to learn more about their usage.

CmdletDescription
Copy-FileHashCopies any files between two directory paths that are new or have changed based on computed hash value.
Compare-FileHashCompares files from one location to another based on determining change via computed hash value.

About

A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison.

Resources

Contributing

Stars

44 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - markwragg/PowerShell-HashCopy: A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison. · GitHub
Skip to content

Repository files navigation

PowerShell-HashCopy

Build StatusTest Coverage

This PowerShell module contains cmdlets for copying and comparing specific files between two paths, where those files have been determined to have changed via a computed hash value. This is useful if you need to sync specific file changes from one directory to another but cannot trust the modified date of the files to determine which files have been modified (for example, if the source files has been cloned from a source control system and as a result the modified dates had changed).

You should of course be confident that if there is a difference between two files, it is the copy you have specified as being in the source -Path that you want to use to overwrite the copy in the -Destination path. New files (files that exist in the source path but not in the destination) will also be copied across, including any directories in their paths that may be missing in the destination folder.

You can synchronise an entire directory tree by using the -Recurse parameter.

Installation

The module is published in the PSGallery, so if you have PowerShell 5 or newer can be installed by running:

Install-Module HashCopy -Scope CurrentUser

Usage

Copy-FileHash

You can use the Copy-FileHash cmdlet to sync a single path by providing it with -Path and -Destination parameters:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

This will compute the hash for all files in each directory (and all sub-directories, due to -Recurse) via the Get-FileHash cmdlet and then will copy any changed and new files from the source path to the destination path.

You can include all the sub-folders of the source -Path by adding -Recurse:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can specify a -LiteralPath instead of a Path if you want to avoid wildcard characters from being interpreted as such:

Copy-FileHash -LiteralPath C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can remove files from the Destination path that are not in the Source path by adding -Mirror:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Mirror

You can have the destination file objects returned by adding -PassThru:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse -PassThru

You can Force the overwrite of read-only files in the Destination path by adding -Force:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Force

You can specify the algorithm that Get-FileHash uses to create the Hash by using -Algorithm:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Algorithm MD5

Valid -Algorithm values are: SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160.

Compare-FileHash

If you'd like to check which files will be copied from a source path before actually using Copy-FileHash, you can use Compare-FileHash. This cmdlet outputs file objects for any new or modified file having performed the same comparison as the Copy- cmdlet (e.g via using Get-FileHash of the source and destination file to determine if they are different).

Check which files would be copied from one single directory to another:

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

Check which files would be copied between one directory tree and another (including all sub-directories):

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

As with Copy-FileHash you can use -LiteralPath instead of -Path to have paths interpreted literally.

Cmdlets

A full list of cmdlets in this module is provided below for reference. Use Get-Help <cmdlet name> with these to learn more about their usage.

CmdletDescription
Copy-FileHashCopies any files between two directory paths that are new or have changed based on computed hash value.
Compare-FileHashCompares files from one location to another based on determining change via computed hash value.

About

A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison.

Resources

Contributing

Stars

44 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - markwragg/PowerShell-HashCopy: A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison. · GitHub
Skip to content

Repository files navigation

PowerShell-HashCopy

Build StatusTest Coverage

This PowerShell module contains cmdlets for copying and comparing specific files between two paths, where those files have been determined to have changed via a computed hash value. This is useful if you need to sync specific file changes from one directory to another but cannot trust the modified date of the files to determine which files have been modified (for example, if the source files has been cloned from a source control system and as a result the modified dates had changed).

You should of course be confident that if there is a difference between two files, it is the copy you have specified as being in the source -Path that you want to use to overwrite the copy in the -Destination path. New files (files that exist in the source path but not in the destination) will also be copied across, including any directories in their paths that may be missing in the destination folder.

You can synchronise an entire directory tree by using the -Recurse parameter.

Installation

The module is published in the PSGallery, so if you have PowerShell 5 or newer can be installed by running:

Install-Module HashCopy -Scope CurrentUser

Usage

Copy-FileHash

You can use the Copy-FileHash cmdlet to sync a single path by providing it with -Path and -Destination parameters:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

This will compute the hash for all files in each directory (and all sub-directories, due to -Recurse) via the Get-FileHash cmdlet and then will copy any changed and new files from the source path to the destination path.

You can include all the sub-folders of the source -Path by adding -Recurse:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can specify a -LiteralPath instead of a Path if you want to avoid wildcard characters from being interpreted as such:

Copy-FileHash -LiteralPath C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can remove files from the Destination path that are not in the Source path by adding -Mirror:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Mirror

You can have the destination file objects returned by adding -PassThru:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse -PassThru

You can Force the overwrite of read-only files in the Destination path by adding -Force:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Force

You can specify the algorithm that Get-FileHash uses to create the Hash by using -Algorithm:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Algorithm MD5

Valid -Algorithm values are: SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160.

Compare-FileHash

If you'd like to check which files will be copied from a source path before actually using Copy-FileHash, you can use Compare-FileHash. This cmdlet outputs file objects for any new or modified file having performed the same comparison as the Copy- cmdlet (e.g via using Get-FileHash of the source and destination file to determine if they are different).

Check which files would be copied from one single directory to another:

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

Check which files would be copied between one directory tree and another (including all sub-directories):

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

As with Copy-FileHash you can use -LiteralPath instead of -Path to have paths interpreted literally.

Cmdlets

A full list of cmdlets in this module is provided below for reference. Use Get-Help <cmdlet name> with these to learn more about their usage.

CmdletDescription
Copy-FileHashCopies any files between two directory paths that are new or have changed based on computed hash value.
Compare-FileHashCompares files from one location to another based on determining change via computed hash value.

About

A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison.

Resources

Contributing

Stars

44 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - markwragg/PowerShell-HashCopy: A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison. · GitHub
Skip to content

Repository files navigation

PowerShell-HashCopy

Build StatusTest Coverage

This PowerShell module contains cmdlets for copying and comparing specific files between two paths, where those files have been determined to have changed via a computed hash value. This is useful if you need to sync specific file changes from one directory to another but cannot trust the modified date of the files to determine which files have been modified (for example, if the source files has been cloned from a source control system and as a result the modified dates had changed).

You should of course be confident that if there is a difference between two files, it is the copy you have specified as being in the source -Path that you want to use to overwrite the copy in the -Destination path. New files (files that exist in the source path but not in the destination) will also be copied across, including any directories in their paths that may be missing in the destination folder.

You can synchronise an entire directory tree by using the -Recurse parameter.

Installation

The module is published in the PSGallery, so if you have PowerShell 5 or newer can be installed by running:

Install-Module HashCopy -Scope CurrentUser

Usage

Copy-FileHash

You can use the Copy-FileHash cmdlet to sync a single path by providing it with -Path and -Destination parameters:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

This will compute the hash for all files in each directory (and all sub-directories, due to -Recurse) via the Get-FileHash cmdlet and then will copy any changed and new files from the source path to the destination path.

You can include all the sub-folders of the source -Path by adding -Recurse:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can specify a -LiteralPath instead of a Path if you want to avoid wildcard characters from being interpreted as such:

Copy-FileHash -LiteralPath C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can remove files from the Destination path that are not in the Source path by adding -Mirror:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Mirror

You can have the destination file objects returned by adding -PassThru:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse -PassThru

You can Force the overwrite of read-only files in the Destination path by adding -Force:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Force

You can specify the algorithm that Get-FileHash uses to create the Hash by using -Algorithm:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Algorithm MD5

Valid -Algorithm values are: SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160.

Compare-FileHash

If you'd like to check which files will be copied from a source path before actually using Copy-FileHash, you can use Compare-FileHash. This cmdlet outputs file objects for any new or modified file having performed the same comparison as the Copy- cmdlet (e.g via using Get-FileHash of the source and destination file to determine if they are different).

Check which files would be copied from one single directory to another:

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

Check which files would be copied between one directory tree and another (including all sub-directories):

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

As with Copy-FileHash you can use -LiteralPath instead of -Path to have paths interpreted literally.

Cmdlets

A full list of cmdlets in this module is provided below for reference. Use Get-Help <cmdlet name> with these to learn more about their usage.

CmdletDescription
Copy-FileHashCopies any files between two directory paths that are new or have changed based on computed hash value.
Compare-FileHashCompares files from one location to another based on determining change via computed hash value.

About

A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison.

Resources

Contributing

Stars

44 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - markwragg/PowerShell-HashCopy: A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison. · GitHub
Skip to content

Repository files navigation

PowerShell-HashCopy

Build StatusTest Coverage

This PowerShell module contains cmdlets for copying and comparing specific files between two paths, where those files have been determined to have changed via a computed hash value. This is useful if you need to sync specific file changes from one directory to another but cannot trust the modified date of the files to determine which files have been modified (for example, if the source files has been cloned from a source control system and as a result the modified dates had changed).

You should of course be confident that if there is a difference between two files, it is the copy you have specified as being in the source -Path that you want to use to overwrite the copy in the -Destination path. New files (files that exist in the source path but not in the destination) will also be copied across, including any directories in their paths that may be missing in the destination folder.

You can synchronise an entire directory tree by using the -Recurse parameter.

Installation

The module is published in the PSGallery, so if you have PowerShell 5 or newer can be installed by running:

Install-Module HashCopy -Scope CurrentUser

Usage

Copy-FileHash

You can use the Copy-FileHash cmdlet to sync a single path by providing it with -Path and -Destination parameters:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

This will compute the hash for all files in each directory (and all sub-directories, due to -Recurse) via the Get-FileHash cmdlet and then will copy any changed and new files from the source path to the destination path.

You can include all the sub-folders of the source -Path by adding -Recurse:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can specify a -LiteralPath instead of a Path if you want to avoid wildcard characters from being interpreted as such:

Copy-FileHash -LiteralPath C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can remove files from the Destination path that are not in the Source path by adding -Mirror:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Mirror

You can have the destination file objects returned by adding -PassThru:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse -PassThru

You can Force the overwrite of read-only files in the Destination path by adding -Force:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Force

You can specify the algorithm that Get-FileHash uses to create the Hash by using -Algorithm:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Algorithm MD5

Valid -Algorithm values are: SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160.

Compare-FileHash

If you'd like to check which files will be copied from a source path before actually using Copy-FileHash, you can use Compare-FileHash. This cmdlet outputs file objects for any new or modified file having performed the same comparison as the Copy- cmdlet (e.g via using Get-FileHash of the source and destination file to determine if they are different).

Check which files would be copied from one single directory to another:

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

Check which files would be copied between one directory tree and another (including all sub-directories):

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

As with Copy-FileHash you can use -LiteralPath instead of -Path to have paths interpreted literally.

Cmdlets

A full list of cmdlets in this module is provided below for reference. Use Get-Help <cmdlet name> with these to learn more about their usage.

CmdletDescription
Copy-FileHashCopies any files between two directory paths that are new or have changed based on computed hash value.
Compare-FileHashCompares files from one location to another based on determining change via computed hash value.

About

A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison.

Resources

Contributing

Stars

44 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - markwragg/PowerShell-HashCopy: A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison. · GitHub
Skip to content

Repository files navigation

PowerShell-HashCopy

Build StatusTest Coverage

This PowerShell module contains cmdlets for copying and comparing specific files between two paths, where those files have been determined to have changed via a computed hash value. This is useful if you need to sync specific file changes from one directory to another but cannot trust the modified date of the files to determine which files have been modified (for example, if the source files has been cloned from a source control system and as a result the modified dates had changed).

You should of course be confident that if there is a difference between two files, it is the copy you have specified as being in the source -Path that you want to use to overwrite the copy in the -Destination path. New files (files that exist in the source path but not in the destination) will also be copied across, including any directories in their paths that may be missing in the destination folder.

You can synchronise an entire directory tree by using the -Recurse parameter.

Installation

The module is published in the PSGallery, so if you have PowerShell 5 or newer can be installed by running:

Install-Module HashCopy -Scope CurrentUser

Usage

Copy-FileHash

You can use the Copy-FileHash cmdlet to sync a single path by providing it with -Path and -Destination parameters:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

This will compute the hash for all files in each directory (and all sub-directories, due to -Recurse) via the Get-FileHash cmdlet and then will copy any changed and new files from the source path to the destination path.

You can include all the sub-folders of the source -Path by adding -Recurse:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can specify a -LiteralPath instead of a Path if you want to avoid wildcard characters from being interpreted as such:

Copy-FileHash -LiteralPath C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can remove files from the Destination path that are not in the Source path by adding -Mirror:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Mirror

You can have the destination file objects returned by adding -PassThru:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse -PassThru

You can Force the overwrite of read-only files in the Destination path by adding -Force:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Force

You can specify the algorithm that Get-FileHash uses to create the Hash by using -Algorithm:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Algorithm MD5

Valid -Algorithm values are: SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160.

Compare-FileHash

If you'd like to check which files will be copied from a source path before actually using Copy-FileHash, you can use Compare-FileHash. This cmdlet outputs file objects for any new or modified file having performed the same comparison as the Copy- cmdlet (e.g via using Get-FileHash of the source and destination file to determine if they are different).

Check which files would be copied from one single directory to another:

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

Check which files would be copied between one directory tree and another (including all sub-directories):

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

As with Copy-FileHash you can use -LiteralPath instead of -Path to have paths interpreted literally.

Cmdlets

A full list of cmdlets in this module is provided below for reference. Use Get-Help <cmdlet name> with these to learn more about their usage.

CmdletDescription
Copy-FileHashCopies any files between two directory paths that are new or have changed based on computed hash value.
Compare-FileHashCompares files from one location to another based on determining change via computed hash value.

About

A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison.

Resources

Contributing

Stars

44 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - markwragg/PowerShell-HashCopy: A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison. · GitHub
Skip to content

Repository files navigation

PowerShell-HashCopy

Build StatusTest Coverage

This PowerShell module contains cmdlets for copying and comparing specific files between two paths, where those files have been determined to have changed via a computed hash value. This is useful if you need to sync specific file changes from one directory to another but cannot trust the modified date of the files to determine which files have been modified (for example, if the source files has been cloned from a source control system and as a result the modified dates had changed).

You should of course be confident that if there is a difference between two files, it is the copy you have specified as being in the source -Path that you want to use to overwrite the copy in the -Destination path. New files (files that exist in the source path but not in the destination) will also be copied across, including any directories in their paths that may be missing in the destination folder.

You can synchronise an entire directory tree by using the -Recurse parameter.

Installation

The module is published in the PSGallery, so if you have PowerShell 5 or newer can be installed by running:

Install-Module HashCopy -Scope CurrentUser

Usage

Copy-FileHash

You can use the Copy-FileHash cmdlet to sync a single path by providing it with -Path and -Destination parameters:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

This will compute the hash for all files in each directory (and all sub-directories, due to -Recurse) via the Get-FileHash cmdlet and then will copy any changed and new files from the source path to the destination path.

You can include all the sub-folders of the source -Path by adding -Recurse:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can specify a -LiteralPath instead of a Path if you want to avoid wildcard characters from being interpreted as such:

Copy-FileHash -LiteralPath C:\Some\Files -Destination D:\Some\Other\Files -Recurse

You can remove files from the Destination path that are not in the Source path by adding -Mirror:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Mirror

You can have the destination file objects returned by adding -PassThru:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse -PassThru

You can Force the overwrite of read-only files in the Destination path by adding -Force:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Force

You can specify the algorithm that Get-FileHash uses to create the Hash by using -Algorithm:

Copy-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Algorithm MD5

Valid -Algorithm values are: SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160.

Compare-FileHash

If you'd like to check which files will be copied from a source path before actually using Copy-FileHash, you can use Compare-FileHash. This cmdlet outputs file objects for any new or modified file having performed the same comparison as the Copy- cmdlet (e.g via using Get-FileHash of the source and destination file to determine if they are different).

Check which files would be copied from one single directory to another:

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files

Check which files would be copied between one directory tree and another (including all sub-directories):

Compare-FileHash -Path C:\Some\Files -Destination D:\Some\Other\Files -Recurse

As with Copy-FileHash you can use -LiteralPath instead of -Path to have paths interpreted literally.

Cmdlets

A full list of cmdlets in this module is provided below for reference. Use Get-Help <cmdlet name> with these to learn more about their usage.

CmdletDescription
Copy-FileHashCopies any files between two directory paths that are new or have changed based on computed hash value.
Compare-FileHashCompares files from one location to another based on determining change via computed hash value.

About

A PowerShell module for copying files between two paths that have been determined to have changed via computed hash value comparison.

Resources

Contributing

Stars

44 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages