脚本重击:将新图像从SD复制到PC

有时我们需要在PC上执行重复性的任务,随着时间的流逝,这些任务变得乏味。 在某些情况下,我们可以通过使用对我们有用的脚本来简化我们的工作。

今天,我正在写信给您看能满足需求的bash脚本:将数码相机中的新图像从SD卡复制到PC。

情况:

每次将新图像下载到计算机上时,我将执行以下操作:

1.打开目录,在该目录中我将图像分类到子目录中。

2.使用yy.mm.dd格式创建一个具有当前日期名称的新子目录。

3.移至上次创建的子目录,然后查看最后保存的图像是什么。

4.将新图像从SD卡复制到新创建的目录。

这只花了不到一分钟的时间,但是只需插入卡就可以轻松完成此过程。

我必须使用存储卡,因为我无法通过USB直接从相机传输图像,因为没有适用于Linux的驱动程序(经常发生……)。

解决方案:

创建一个执行以下操作的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设置管理器→可移动驱动器和介质→相机

使用导入图像选项。 插入卡时,将出现一个对话框,询问是否要导入图像。 接受后,将执行脚本。

就是这样。 抱歉,文本太乱了,这是我的第一篇文章,并且在编辑脚本时我不知道如何将其制成表格。 我希望至少对某人有一个想法并将其适应每个特定案例是有用的。

我没有许可,因为我没有很好地了解GPL的每个版本,但是他们可以自由复制和修改它。 并且不要犹豫地说如何改进它,或者是否有其他方法可以做到但又容易得多。

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   Percaff_TI99

    Joaquín非常有趣,一个好主意是将脚本上载到粘贴中,这样可以更轻松地共享代码,并且正如您所说的,它可以适应其他需求,并且学会了更多使用bash。

    您好!

    1.    华金

      完成,添加 http://paste.desdelinux.net/4737
      谢谢!

  2.   虚拟机

    复制目录中已经存在的照片时,它不表示已存在照片,而您可以选择替换还是不复制?

    无论如何,它非常有用,因为它会自动执行所有操作

    1.    华金

      你好它实际上并没有复制重复的图像,只是忽略了它们。 这个想法恰好是在不需要用户交互的情况下复制新文件。 另外,除非每天添加图像不止一次,否则脚本会将新文件复制到新目录。 我简要解释一下:

      今天是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目录中。 没有一个被覆盖。

      我希望我已经澄清了我的想法🙂

  3.   马努蒂

    而且您不知道Rapid Photo Downloader? 我认为它不仅可以完成所有这一切。

    1.    布莱克先生

      问题是,一个瘦小的家伙自己做了,我想他会很开心的,而且可以为别人服务

    2.    华金

      你好我不知道,从互联网上看似乎还不错,但实际上脚本完全可以满足我的需要。 插入卡并自动复制所有文件。

      它也帮助我学到了更多的东西,因为显然这第一次没有用。 错误发生了,您可以从中学到很多东西。

      我无意展示该脚本来解决其他人的问题,有些应用程序就像您提到的那样更通用。 我将其共享给您阅读,并作为使用循环(在这种情况下为“ for”)和正则表达式(脚本中的变量“ ULTIMG”和“ FILTER”)创建新事物的参考。

  4.   代码实验室

    它似乎很有用,请妥善保管以备有需要。 谢谢。

    1.    华金

      谢谢!

  5.   九分

    但是为此,我们已经有了grsync

    1.    华金

      是的,但是我认为rsync用于备份。 我从没有看过它,但是它是我们应该考虑并向我们所有人学习的应用程序。

      我不知道rsync有图形界面。

  6.   Lastnewbie

    哇,我发现代码非常有趣,非常有用。 保持。 😀
    如果需要,我会保留下来。

    问候。

    1.    华金

      谢谢!。