Назад | Перейти на главную страницу

Свяжите все JPG-файлы в дереве каталогов с одним каталогом

У меня есть серия каталогов и изображений, содержащихся в:

/Volumes/library/Originals/2012/2012-05-13 Event/filename.jpg
/Volumes/library/Originals/2011/2011-03-11 Event/filename.jpg
/Volumes/library/Originals/2011/2011-01-12 Event/filename.jpg
/Volumes/library/Originals/2009/2019-07-11 Event/filename.jpg

Как с помощью bash создать символические ссылки на это дерево каталогов в одном каталоге?

/image-links/filename.jpg
/image-links/filename1.jpg

Мне это нужно, чтобы заставка с фотографиями работала в Mac OS X 10.8, которая не поддерживает рекурсивные каталоги. Я полагаю, что могу сделать работу cron, которая будет делать это каждую ночь. Спасибо за вашу помощь.

Как насчет этого:

IFS=
no=1
for file in `find /Volumes/library/Originals -type f -name '*.jpg'`; do
  prefix=`basename $file .jpg`
  ln -s $file /image-links/$prefix$no.jpg
  no=$(($no + 1))
done

Краткое примечание: вам нужно отключить переменную IFS, потому что MacOS X любит пробелы в именах каталогов и файлов. IFS, установленный в nil, предотвращает удаление в цикле for цикла имен файлов, доставленных командой find, в местах, где есть пробелы. Больше о IFS, конечно же, можно найти на странице руководства bash.

Быстрое примечание 2: у меня есть счетчик «нет», который начинается с 1 и используется для различения файлов с одинаковыми именами источников. Цикл for проходит по результатам поиска, который собирает все файлы в / Volumes / library / Originals, заканчивающиеся на .jpg. Каждый файл, который находится как «/ Volumes / library / Originals / something / something else / etc / <filename> .jpg», затем символически связывается как «/ image-links / <filename> <no> .jpg». 'basename' удаляет полный путь из каталогов и суффикс .jpg.

Думаю, здесь неправильный подход. Вы хотите поделиться фотографиями из iPhoto, которые будут использоваться в качестве источника для заставки рабочего стола.

Способ сделать это чисто состоит в том, чтобы создать альбом изображений, которые вы хотите использовать. Это также может быть "Умный альбом", который использует базовую логику для определения своего содержания.

Затем на панели настроек рабочего стола и экранной заставки выберите iPhoto в качестве источника данных. Если у вас возникли проблемы с выбором iPhoto, вам может потребоваться очистить файл .plist, связанный с этими настройками (Выпуск Mountain Lion).

Вам нужно будет добавить логику для работы с повторяющимися именами, но вы можете начать с самого простого использования find, например find ./ -name * jpg -execdir / tmp -exec / bin / ln -s '{}' \; выполняется из каталога, в котором вы хотите разместить ссылки.