Символьная ссылка для файлов во вложенной папке

У меня есть медиасервер с файлами, размещенными на ряде сетевых жестких дисков (все файлы находятся в символьных ссылках, чтобы позволить им быть пойманными моим сервером DLNA),

Как может я символьная ссылка (ln -s) весь "cover.jpg" к тому же dir, в котором покрытия находятся в, но как ссылка под названием poster.jpg для всех вложенных папок, расположенных /mnt/1TB2/TV/?

Я действительно пробовал этот код, и он перечислит их всех с этой строкой

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

Это заканчивает тем, что перечислило их всех, но не позволит мне использовать это в сценарии удара как это:

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

Однако я не являюсь лучшим в сценариях удара (серьезно мало ни к какому опыту), я думаю, что они имеют некоторое отношение к пробелу на имена папок, но я не уверен.

Примечание: Существует много файлов и папок в этом диске, но основная карта следующие

=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
2
задан 9 September 2019 в 11:46

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 будет разделен в пространстве.

    Обычно лучше постараться не обрабатывать имена файлов в сценарии оболочки, вместо этого с помощью find -exec или find -execdir. Но если Вы действительно должны, самый полный метод, о котором я знаю,

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

    ... который является полным ртом.

  2. ln -s $file poster.jpg

    С тех пор нет никакого изменения каталогов, символьная ссылка будет создана в каталоге, где Вы запускаете скрипт.

    И это также разделит $file на пробеле. Необходимо всегда заключать переменные в кавычки: "$file"

2
ответ дан 2 December 2019 в 03:31

Другие вопросы по тегам:

Похожие вопросы: