有时我们需要在PC上执行重复性的任务,随着时间的流逝,这些任务变得乏味。 在某些情况下,我们可以通过使用对我们有用的脚本来简化我们的工作。
今天,我正在写信给您看能满足需求的bash脚本:将数码相机中的新图像从SD卡复制到PC。
情况:
每次将新图像下载到计算机上时,我将执行以下操作:
1.打开目录,在该目录中我将图像分类到子目录中。
2.使用yy.mm.dd格式创建一个具有当前日期名称的新子目录。
3.移至上次创建的子目录,然后查看最后保存的图像是什么。
4.将新图像从SD卡复制到新创建的目录。
这只花了不到一分钟的时间,但是只需插入卡就可以轻松完成此过程。
解决方案:
创建一个执行以下操作的bash脚本:
1.在启动时验证是否已安装SD卡。 否则结束。
2.转到图像的主目录,然后找到最后一个。 将您的姓名保存在变量中。
3.将当前日期与上一个目录进行比较,如果它们不同,则以“ yy.mm.dd”格式创建一个具有当前日期名称的新目录。
4.移至最后一个目录(不是新目录,而是旧目录),并将上次传输的最后文件的名称保存在变量中。
在此步骤中,有必要过滤文件名,以便能够在不久的将来将其与卡上的新文件进行比较。 这些文件具有以下格式: XXX_xxxx.eee 其中:x =数字0到9,eee =扩展名(JPG,MOV)。 例如:100_5684.JPG,100_5699.MOV。 过滤器之后,名称仍为xxxxxxx 因此,在上面的示例中,我们将有:1005684、1005699。
由于目录可以包含其他类型的文件或具有更改的名称,因此将使用过滤器。
5.移至卡上,然后如前所述过滤文件。
6.将卡上的文件与包含上次传输的最后一个文件的变量进行比较(第4点),然后将命名文件复制到新创建的目录中 大于变量。 (因为名称只是数字)。
7.使用文件管理器打开包含新图像的目录。
接下来,我向您展示脚本,其中包含解释其工作原理的注释。 我澄清说我不是程序员,在让它起作用之前,尤其是当我不得不为“ for”循环过滤名称时,它使我头痛不已。
#!/ bin / bash ### ---验证是否已安装SD --- ### SD = / media / KODAK / DCIM / 100Z8612,如果[[-d $ SD]]; 然后### ---创建目录--- ####读取图像目录,并创建另一个具有#current日期的名称和权限755(如果不存在)。 cd〜/图片/柯达ULTDIR =`ls -1 | tail -n1`#列表中的最后一个目录。 DATE =`date +%y。%M.%D`#当前日期为YY.MM.DD格式,如果[“ $ LASTDIR”!=“ $ DATE”]; 然后mkdir -vm 755`date +%y。%m。%d`#使用当前日期创建目录fi ### ---查看$ ULTDIR的最后一个文件--- ### cd $ ULTDIR ULTIMG =`ls- [JM] [PO] [GV] | 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9] 尾-n1 | cut -c1-3,5-8`#查看最后一个名称为xxx_XXXX.eee的图像。eee =文件扩展名(JPG或MOV)#为确保脚本在执行后能够正常工作:#100_9999.eee- > 101_0000.eee并且没有错误#剪切,因此它采用xxxXXXX格式### ---移至列表的最后目录--- ####或最近创建的(如果#cd已创建.. ULTDIR = `ls -1 | tail -n1`#再次出现,因为否则它将采用if cd / media / KODAK / DCIM / 100Z8612 ### ---过滤SD中的文件的上一个ULTDIR --- ### FILTER =`ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]。[JM] [PO] [GV]`###- -比较名称比最后一个更大的新文件--- ###为我在$ FILTER中做N =`echo $ I | 剪切-c1-3,5-8`#如果[[“” ULTIMG“ -lt” $ N“]]剪切名称; 然后cp $ I〜/ Pictures / kodak / $ ULTDIR fi done thunar〜/ Pictures / kodak / $ ULTDIR#使用Thunar打开新目录,否则退出0 fi exit 0
最后,要使其正常工作,我将其添加到了菜单中Xfce的“可移动驱动器和媒体”应用程序中
设置→Xfce 4设置管理器→可移动驱动器和介质→相机
使用导入图像选项。 插入卡时,将出现一个对话框,询问是否要导入图像。 接受后,将执行脚本。
就是这样。 抱歉,文本太乱了,这是我的第一篇文章,并且在编辑脚本时我不知道如何将其制成表格。 我希望至少对某人有一个想法并将其适应每个特定案例是有用的。
Joaquín非常有趣,一个好主意是将脚本上载到粘贴中,这样可以更轻松地共享代码,并且正如您所说的,它可以适应其他需求,并且学会了更多使用bash。
您好!
完成,添加 http://paste.desdelinux.net/4737
谢谢!
复制目录中已经存在的照片时,它不表示已存在照片,而您可以选择替换还是不复制?
无论如何,它非常有用,因为它会自动执行所有操作
你好它实际上并没有复制重复的图像,只是忽略了它们。 这个想法恰好是在不需要用户交互的情况下复制新文件。 另外,除非每天添加图像不止一次,否则脚本会将新文件复制到新目录。 我简要解释一下:
今天是10/03/13,我创建了一个名为13.03.10/100/4440的目录,并在其中复制了一些图像或视频(MOV):100_4441.JPG,100_4442.JPG,100_4445.MOV,XNUMX_XNUMX.JPG
(丢失的4443和4444被相机删除,最后一个是4445)。
然后,假设我使用01年04月13日的脚本,并且卡上有新图像。 该脚本会在新名称大于“ 13.04.01”的图像/视频中创建一个名为4445的目录; 因为它读取目录13.03.10,最后一张图片是100_4445.JPG。 如果我在同一天使用新的卡片图像重新运行脚本,它们将被添加到13.04.01目录中。 没有一个被覆盖。
我希望我已经澄清了我的想法🙂
而且您不知道Rapid Photo Downloader? 我认为它不仅可以完成所有这一切。
问题是,一个瘦小的家伙自己做了,我想他会很开心的,而且可以为别人服务
你好我不知道,从互联网上看似乎还不错,但实际上脚本完全可以满足我的需要。 插入卡并自动复制所有文件。
它也帮助我学到了更多的东西,因为显然这第一次没有用。 错误发生了,您可以从中学到很多东西。
我无意展示该脚本来解决其他人的问题,有些应用程序就像您提到的那样更通用。 我将其共享给您阅读,并作为使用循环(在这种情况下为“ for”)和正则表达式(脚本中的变量“ ULTIMG”和“ FILTER”)创建新事物的参考。
它似乎很有用,请妥善保管以备有需要。 谢谢。
谢谢!
但是为此,我们已经有了grsync
是的,但是我认为rsync用于备份。 我从没有看过它,但是它是我们应该考虑并向我们所有人学习的应用程序。
我不知道rsync有图形界面。
哇,我发现代码非常有趣,非常有用。 保持。 😀
如果需要,我会保留下来。
问候。
谢谢!。