bash - 将不同编码的电影移动到具有原始电影标题的公共文件夹
问题描述
所以我遇到了这种情况......我的文件夹中有很多文件,看起来像这样
Iron.Man.2008.1440p.UHD.US.BluRay.x265.HDR.DD5.1-Pahe.in
Iron Man 2008.720p.BrRip.x264.YIFY
Iron.Man.2008.US.RERiP.720p.UHD.BluRay.x264-Pahe.in
Iron.Man.2008.Open.Matte.720p.WEB-HD.x264-Pahe.in
Iron.Man.2008.US.RERiP.1080p.UHD.BluRay.x264.DD5.1-Pahe.in
The.Incredible.Hulk.2008.REMASTERED.1080p.BluRay.x264.DD5.1-Pahe.in
The.Incredible.Hulk.2008.REMASTERED.720p.BluRay.x264-Pahe.in
The.Avengers.2012.2160p.10bit.HDR.BluRay.8CH.x265.HEVC-PSA
The.Avengers.2012.1080p.10bit.BrRip.6CH.x265.HEVC-PSA
The.Avengers.2012.720p.10bit.BrRip.6CH.x265.HEVC-PSA
所以我有多部相同的电影 - 但编码器和质量不同。
我想要实现的是将所有这些不同的编码移动到一个以原始电影名称为标题的公共文件夹中
例如
Iron.Man.2008
Iron.Man.2008.1440p.UHD.US.BluRay.x265.HDR.DD5.1-Pahe.in
Iron Man 2008.720p.BrRip.x264.YIFY
Iron.Man.2008.US.RERiP.720p.UHD.BluRay.x264-Pahe.in
Iron.Man.2008.Open.Matte.720p.WEB-HD.x264-Pahe.in
Iron.Man.2008.US.RERiP.1080p.UHD.BluRay.x264.DD5.1-Pahe.in
The.Incredible.Hulk.2008
The.Incredible.Hulk.2008.REMASTERED.1080p.BluRay.x264.DD5.1-Pahe.in
The.Incredible.Hulk.2008.REMASTERED.720p.BluRay.x264-Pahe.in
The.Avengers.2012
The.Avengers.2012.2160p.10bit.HDR.BluRay.8CH.x265.HEVC-PSA
The.Avengers.2012.1080p.10bit.BrRip.6CH.x265.HEVC-PSA
The.Avengers.2012.720p.10bit.BrRip.6CH.x265.HEVC-PSA
我曾尝试将其作为 bat 文件运行..它创建了文件夹,但它根据原始文件名移动了文件..每个编码都移动到了它们自己的特定文件夹中
@echo off
for %%a in (*.*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)
pause
我愿意接受 Windows 或 Linux 中的任何解决方案
谢谢
解决方案
由于您还标记了 this PowerShell
,因此这是一个解决方案:
$sourceFolder = 'D:\Test' # where the files are now
$destination = 'D:\Movies' # where the subfolders storing the files should be created
$regex = '^(\D+[.\s]\d{4})\..*' # see explanation below
(Get-ChildItem -Path 'D:\Test' -File | Where-Object { $_.BaseName -match $regex }) |
ForEach-Object {
$subFolder = ([regex]$regex).Match($_.BaseName).Groups[1].Value -replace '\s', '.'
$targetDir = Join-Path -Path $destination -ChildPath $subFolder
# create the subfolder if it does not yet exist
if (!(Test-Path -Path $targetDir -PathType Container)) {
$null = New-Item -Path $targetDir -ItemType Directory
}
$_ | Copy-Item -Destination $targetDir
}
正则表达式详细信息:
^ # 在行首断言位置(在字符串的开头或换行符之后) ( # 匹配下面的正则表达式并将其匹配捕获到反向引用编号 1 \D # 匹配非数字的单个字符 0..9 + # 一次到无限次,尽可能多次,按需回馈(贪婪) [.\s] # 匹配下面列表中的单个字符 # 性格 ”。” # 一个空白字符(空格、制表符、换行符等) \d # 匹配单个数字 0..9 {4} # 正好 4 次 ) \。# 匹配字符“.” 字面上地 . # 匹配任何不是换行符的单个字符 * # 在零次和无限次之间,尽可能多次,按需回馈(贪婪)
推荐阅读
- jquery - 如何显示 Kendo Editor 的所有工具并防止它们推送到溢出锚点?
- python - 如何在opencv python中的固定位置显示框架
- c# - dotnet-/usr/local/bin/dotnet 不存在
- microsoft-teams - 针对外部 API 对 Microsoft Teams 选项卡进行身份验证
- listview - 实现基于时间线的 Dismissable ListTile 小部件
- ios - 为什么不调用 didDiscardSceneSessions ?
- html - 我用来将“find”更改为“(nd”的字体。有人知道为什么吗?
- javascript - 使用辅助监视器时,如何在 window.onmousemove 上获取相对于主屏幕的 e.screenX/Y?
- javascript - JavaScript 从数组构建不完整二叉树
- swift - 在 HTTP 请求正文中传递数组