У меня есть медиасервер с файлами, размещенными на ряде сетевых жестких дисков (все файлы находятся в символьных ссылках, чтобы позволить им быть пойманными моим сервером 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
Я думаю, что Вы хотите это:
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
будет разделен в пространстве.
Обычно лучше постараться не обрабатывать имена файлов в сценарии оболочки, вместо этого с помощью find -exec
или find -execdir
. Но если Вы действительно должны, самый полный метод, о котором я знаю,
while IFS= read -rd '' filename; do
...
done < <(find ... -print0)
... который является полным ртом.
ln -s $file poster.jpg
С тех пор нет никакого изменения каталогов, символьная ссылка будет создана в каталоге, где Вы запускаете скрипт.
И это также разделит $file
на пробеле. Необходимо всегда заключать переменные в кавычки: "$file"