我有一台媒体服务器,其文件托管在一组网络硬盘驱动器上(所有文件都在符号链接中,以使它们被我的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
我想你想要这个:
find -L /mnt/1TB2/TV/* -name cover.jpg -execdir ln -s cover.jpg poster.jpg \;
-execdir
移至文件目录,然后执行ln -s cover.jpg poster.jpg
。
您的脚本有两个主要问题:
for file in $(find -L /mnt/1TB2/TV/* -name 'cover.jpg')
这将在空白处中断。例如,包含的文件路径SEASON 01
将在该空格处分割。
通常最好避免在shell脚本中处理文件名,而应使用find -exec
或find -execdir
。但是,如果您确实需要,我知道的最彻底的方法是
while IFS= read -rd '' filename; do
...
done < <(find ... -print0)
...这是一口。
ln -s $file poster.jpg
由于目录没有变化,因此将在运行脚本的目录中创建符号链接。
这也将$file
在空白处分割。您应该始终引用变量:"$file"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句