我有一系列的目录和图像包含在:
/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在一个目录中创build符号链接到这个目录树?
/image-links/filename.jpg /image-links/filename1.jpg
我需要这个让我的照片屏幕保护程序运行在不支持recursion目录的Mac OS X 10.8上。 我想我可以做一个晚上做这个工作。 谢谢你的帮助。
这个怎么样:
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
快速提示:您必须取消设置IFSvariables,因为MacOS X喜欢目录和文件名中的空格。 如果IFS设置为零,则防止“for”循环在空间位置拆除由“find”传递的文件名。 当然,更多关于IFS的手册页。
快速注2:我有一个从“1”开始的计数器“no”,用来区分具有相同源名称的文件。 for循环运行“find”的结果,该结果收集以.jpg结尾的/ Volumes / library / Originals下的所有文件。 然后,每个以“/ Volumes / library / Originals / something / something / etc。/ <filename> .jpg”命名的文件被象征性地链接为“/image-links/<filename><no>.jpg”。 “basename”从目录和.jpg后缀中剥离完整path。
我认为这里的做法是错误的。 您正在寻找分享照片从iPhoto作为您的桌面屏幕保护程序的来源。
干净地做这个的方法是创build你想要使用的图像的相册。 它也可以是一个“ 智能相册 ”,它使用基本逻辑来确定其内容。

然后,在桌面和屏幕保护程序首选项窗格中,selectiPhoto作为数据源。 如果您在selectiPhoto时遇到任何问题,则可能需要清除与这些首选项相关的.plist文件 (Mountain Lion问题)。

您必须添加逻辑来处理重复的名称,但是您可以从find的一个非常基本的用法开始,如find ./ -name * jpg -execdir / tmp -exec / bin / ln -s'{}'\; 从您想要链接出现的目录执行。