我在网上找到的所有东西都失败了。我使用 unbuntu 2204 并尝试编写一个 bash 脚本来替换我的媒体库目录名称中的句点。我发现的最新脚本已经有 4 年历史了,我知道从那时起事情已经发生了变化。我仍然尝试了它,但失败了,在 do 命令的第 2 行给出了无效语法错误。
我所需要的只是:我有一个儿童电影目录和我的电影目录。两者都包含 400 多部电影,有些在标题中包含音频类型和分辨率等详细信息。我不在乎这一点,因为我的丛库向我展示了这一点,我只想要电影标题和括号中的年份。即 Avatar (2019) 而不是 Avatar.2019.4k.DTS.xyz。
我终于让我的下载处理程序在下载时正确重命名目录,但我想返回并将当前库也重命名为这种格式。任何帮助表示赞赏!
更新 抱歉之前的含糊不清,我感谢您在这方面的帮助。除了一般的 Linux 命令之外,我不知道脚本或任何类型的语言。我从 2013 年开始就开始接触 ubuntu。
链接到 4 年前的脚本将目录和子目录名称中的所有点递归替换为空格
我的媒体存储在 NAS 上,在启动时安装,并在以下目录中找到:/home/plex/MediaShare/Kids_Movies/* 和 /home/plex/MediaShare/My_Movies/*
当前目录名称是这样的功夫熊猫.3.2016.1080p.BluRay.DDP.5.1.H.265.-iVy
而所需的目录名称是功夫熊猫3 (2016)
我已经尝试了推荐的 ZSH 命令,但无法识别 zmv。最新的 shell 是 5.8.1,是我的默认 shell。我也愿意接受功夫熊猫.3.2016作为目录名称,但我无法预测现在目录名称中的格式扩展名。
答案1
用zsh
而不是bash
:
autoload zmv
cd ~/Videos &&
zmv -n '(**/)(*).(<1878-2024>).*(#q/)' '$1$2 ($3)'
-n
如果对结果满意,请删除(试运行)。
基本上,它会找到 1878(对于运动中的马通常被认为是 1878 年和 2024 年(今年撰写本文时制作的第一部电影,尽管您可以用单引号替换${(%):-"%D{%Y}"}
或"$(date +%Y)"
在单引号之外进行动态计算),目录的基本名称中用点包围((#q/)
在模式将匹配限制为文件类型目录)用括号括起来,并跟随该数字之前的内容。
如果您想用空格替换点,并将年份前面的内容大写,并对数字进行规范化,例如替换some.path/to/the.HORSE.in.motion.00001878.foo.bar
为some.path/to/The Horse In Motion (1878)
,您可以将其更改为:
zmv -n '(**/)(*).(<1878-2024>).*(#q/)' '$1${(C)2//./ } ($(($3)))'
答案2
答案3
您可以使用 awk 从文件名中选择您想要的内容。考虑这个命令:
$ echo "Avatar.2019.4k.DTS.xyz" | awk -F. '{print $1"("$2")"}'
Avatar(2019)
将 echo 命令替换为文件的完整列表,将它们通过管道传输到 awk 并应用 mv 或 cp 命令。您可以使用非常短的脚本来完成。