如何从文件夹路径和文件名派生多个 bash 变量?

如何从文件夹路径和文件名派生多个 bash 变量?

这是我第二十次尝试写这篇文章,但它总是变成一个庞然大物……所以我会尽量保持简短。

基本上我想做的是通过编写一个脚本来将我的菜鸟技能推向极限,该脚本获取 Deluge torrent 客户端控制台的输出,即添加或完成 torrent 时文件夹的路径和名称,然后创建硬链接torrent 中的所有文件,根据现有文件名和路径的各个部分来命名它们。

现有的下载路径和文件名包含我需要的所有内容,除了每个硬链接名称相同的几个单词(即每个硬链接名称都会在开头添加“The”)。我还需要将文件名的某些位替换为我可以在脚本中定义的文本片段(即将“One”替换为“1”,或将“Foos.Bar”替换为“Foos' Bar”)。需要重新排列从文件夹路径和文件名派生的各种信息,以便新硬链接的名称符合 Plex 的命名约定。

脚本必须考虑的另一件重要事情是,只有当目标文件夹中尚不存在硬链接时,它才应该创建硬链接。由于相关的 torrent 在一周内发布了多个版本,每个版本都向文件夹中添加了额外的文件,这一事实使情况变得复杂。

我可以让 deluge-console 将 $torrentpath/$torrentname 输出到文件,但我现在不知道从那里去哪里。

如果有人能够为我指明下一步需要采取的正确方向,或者我应该使用哪些 shell 工具,那么我很乐意做我需要做的尽可能多的跑腿工作。


[编辑1]

if [[ $torrentname == "Name.*.of.Torrent.1080P" ]] then ;
    cd $torrentpath/$torrentname
#the follwing gives just the YYYY from a the uploader's filename.
    Eyear=$"ls 01* | sed -r 's/.{6}//; s/(.{4}).*/\1/'"

[编辑2]

我已经回答了我自己的大部分问题,但我不会发布我想出的确切解决方案(它是正则表达式的),因为这完全取决于我的具体场景(文件夹结构和我下载的 torrent 的名称)。不过,我将给出一个总体概述。

为了设置我想要的变量,我正在使用(或者应该“玩弄”?)ls以及各种sed和/或awk正则表达式命令和管道。我已经让这些命令正常工作,以便它们可以与我使用的两个上传器使用的不同命名方案一起使用,这样我就可以获得创建符合 Plex 命名方案的名称所需的大部分信息(其余的该名称是标准文本,我可以简单地插入)。

为了达到编写工作脚本的目的,我需要找到远远超出我原始问题范围的问题的答案。因此,在我将此线程标记为已解决之前,我最后要说的是,如果您与我在同一条船上,并且您想从文件名及其文件夹路径、研究sedawk正则表达式和管道中提取字符串...

sed用于从文件名中提取字符串以及修改文本

awk(通过管道输入sed)用于从文件夹路径中提取字符串

相关内容