嵌套文件夹中文件的符号链接

嵌套文件夹中文件的符号链接

我有一个媒体服务器,其文件托管在一组联网硬盘上(所有文件都在符号链接中,以便我的 dlna 服务器可以捕获它们)

我怎样才能将ln -s所有“cover.jpg”符号链接()到封面所在的同一目录,但作为名为 poster.jpg 的链接,指向位于其中的所有嵌套文件夹/mnt/1TB2/TV/

我确实尝试过此代码,它将使用此行列出所有内容

find -L /mnt/1TB2/TV/* -name 'cover.jpg'

它最终列出了所有这些,但不允许我在这样的 Bash 脚本中使用它:

#!/bin/bash
for file in $(find -L /mnt/1TB2/TV/* -name 'cover.jpg')
do
    ln -s $file poster.jpg
done

然而,我并不是最擅长编写 bash 脚本的人(实际上经验很少甚至没有经验)我认为这与文件夹名称中的空格有关,但我不确定。

笔记: 此驱动器中有很多文件和文件夹,但主图如下

=TV SHOW NAME (CONTAINING SPACES)
=-cover.jpg
=-trailer.mov
=-SEASON 00
=-+cover.jpg
=-+TV SHOW - 0X01 - EPISODE NAME.MKV
=-SEASON 01
=-+cover.jpg
=-+TV SHOW - 1X01 - EPISODE NAME.MKV

答案1

我想你想要这个:

find -L /mnt/1TB2/TV/* -name cover.jpg -execdir ln -s cover.jpg poster.jpg \;

-execdir移动到文件目录,并执行ln -s cover.jpg poster.jpg


您的脚本有两个主要问题:

  1. for file in $(find -L /mnt/1TB2/TV/* -name 'cover.jpg')

    这将在空格处断开。例如,包含的文件路径SEASON 01将在空格处被拆分。

    通常最好避免在 shell 脚本中处理文件名,而是使用find -execfind -execdir。但如果你真的需要,我知道最彻底的方法是

    while IFS= read -rd '' filename; do
        ...
    done < <(find ... -print0)
    

    ... 真是一口气。

  2. ln -s $file poster.jpg

    由于目录没有变化,因此将在运行脚本的目录中创建符号链接。

    这也将$file在空格处进行拆分。您应该始终引用变量:"$file"

相关内容