我是 Linux 新手,正在寻找脚本方面的帮助。我正在使用 Resilio 备份我们 iPhone 上的照片。它们位于“/media/data/phones/myiphone/resilio”
不幸的是,resilio 会将照片导入 iOS 文件夹中,每个文件夹最多可包含 100 张照片。当文件夹填满时,iOS 会创建一个新的随机 DCIM 文件夹(100APPLE 等),因此文件夹会根据 iPhone 的要求定期添加到 /resilio 目录中。这是我觉得棘手的部分,因为我不想每次添加新的 DCIM 文件夹时都更改脚本。
我想提取每个“iOS”文件夹中的所有图片和视频,并将它们移动到一个新的单个目录中,以便所有图片都在一个文件夹中(抱歉,目录):
/media/data/phones/myiphone/pics
我希望每天做一次这个。
(然后图片目录将同步到我的 Windows 机器,我可以在那里编辑照片等,但这不是我需要帮助的部分。)
如果有人能从头到尾指导我,包括如何安排脚本运行,我将不胜感激。假装您正在向幼儿园小朋友(可以阅读和打字)解释。
我很乐意澄清任何不清楚的地方。谢谢!!
答案1
首先编写一个简单的脚本,将图片/视频移动到所需目录。类似于以下内容,位于名为“backupPhotos.sh”的文件中。我必须假设您知道如何使用文本编辑器。
#!/bin/bash
cd /media/data/phones/myiphone/resilio
find . -type f -exec mv {} ../pics \;
第一行表示使用 /bin/bash(通常是您在终端窗口中使用的默认 shell)运行此脚本。以“cd”开头的行将当前工作目录更改为 Resilio 保存照片的目录。最后一行将 resilio 目录下的所有文件移动到 pics 目录(仅文件将被移动“-type f”,而不是目录结构。
然后做:
chmod 755 backupPhotos.sh
mkdir /media/data/phones/myiphone/pics
chmod 命令告诉 Ubuntu 该文件包含可执行脚本。mkdir 命令创建“pics”目录来保存图片/视频。如果您已经有 pics 目录,则无需执行 mkdir。
通过输入命令来试用该脚本
./backupPhotos.sh
在您创建该文件的目录中。请采取预防措施,确保在此测试阶段将图片保存在其他地方,以防出现问题。运行脚本后,“resilio”下的所有目录都应为空,所有图片/视频都应位于“pics”目录中。
一旦你确信它正常工作,你可以使用 crontab 安排它运行。在执行下一个命令之前,你应该通过输入以下内容来识别你首选的文本编辑器
export EDITOR=gedit
这会将您的首选编辑器设置为“gedit”(暂时)。将“gedit”替换为您喜欢并已安装的任何文本编辑器。然后输入命令
crontab -e
这会将您带到您最喜欢的编辑器中,其中有一个可能为空的 crontab 文件。crontb 文件中应该有一些文本,但应该用“#”字符注释掉它们。您将在文件末尾添加一行来安排运行新脚本。该行将是:
0 5 * * * /path_to_script_directory/backupPhotos.sh
其中“path_to_script_directory”是脚本所在位置的完整路径(类似于 /home/mkinsocal)。三个星号表示每天运行脚本。“0 5”表示在凌晨 5 点 0 分运行。请注意,您必须每天凌晨 5 点启动并运行计算机才能实现此功能。将行添加到 crontab 文件后,保存它,就大功告成了。
答案2
我认为您有一个类似 的文件夹结构/media/data/phones/myiphone/pics/100APPLE
,/media/data/phones/myiphone/pics/101APPLE
等等。这可以通过以下方法解决通配符. Glob 基本上使用特殊字符作为通配符。
- * 表示任意字符、任意次数,包括零次。
- ? 表示任意字符,至少一次。
- [abc] 将匹配列出的一个字符,至少出现一次。
- [az] 将匹配间隔内的一个字符。
因此ls [0-9]foo
将匹配1foo
和9foo
,但 不会12foo
。*foo
将匹配两者。
因此,最简单的 glob 可能是 ???APPLE,以匹配名称中有 8 个字符、以 APPLE 结尾但有三个未知起始字符的任何文件夹。
可以使用 * 来匹配里面的任何文件,例如ls ???APPLE/*
将列出所有这些文件夹中的所有文件。
我在这里使用 ls 作为示例,但是通配符是由 shell 处理的,并且您可以同样好地 mv 文件而不是列出它们 - 或者列出它们,然后运行 for 循环。
另一种方法是使用 find,正如@Drymartini 所建议的那样。简而言之,您有多种可能性。
答案3
你可以这样做man find
像这样的事情会有所帮助:
find ./ -iname *.jp?g -exec cp '{}' photosDir/ \;