首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将屏幕截图从桌面移动到文件夹的Bash脚本

将屏幕截图从桌面移动到文件夹的Bash脚本
EN

Stack Overflow用户
提问于 2020-12-26 15:26:19
回答 2查看 279关注 0票数 0

我的桌面上有大量截图(这是保存它们的默认位置),它的标题是“屏幕快照2020-10-11 at 7.08.12 PM.png”,我想使用带有regex的bash脚本在“屏幕快照”位上将任何这样的文件从我的桌面移动到我创建的文件夹“屏幕快照”。

现在,我正在玩find . -regex Screen*.*?.png,但是它不太好用(它给了find: Screen Shot 2020-10-11 at 7.11.09 PM.png: unknown primary or operator)。

当输出找到所有正确的文件以将它们移动到文件夹时,我也不确定如何使用它。您能以某种方式使用for i in seq 1 100或诸如此类的方法来遍历文件夹中的所有文件吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-26 15:31:14

在这里,您甚至不需要-regex:

代码语言:javascript
复制
find . -type f -name 'Screen Shot*png' -maxdepth 1 -exec echo mv "{}" screenshots \;

您可以安全地运行这个命令,因为它不会做任何事情,只会打印它要做的事情。删除echo以实际运行mv

所有使用的选项都记录在man find中,但简而言之:

-type f将使find只查找文件,而不是目录。如果您有一个与-name匹配的目录,这是非常有用的--我们不想碰它。

-maxdepth 1只会在相同的目录级别上查看火文件--在这里非常有用,因为您可能已经有一些与screenshots目录中的-name匹配的文件了--我们想让它们单独使用。

-name接受shell模式,而不是regex。当然,我们可以在这里使用-regex,但是我更喜欢-name,因为shell模式在这里更短更容易使用。

{}是一个占位符,将被替换为查找文件的名称。

\;是一个文字分号,转义是为了防止它被以-exec指定的命令结尾的shell所解释。

票数 3
EN

Stack Overflow用户

发布于 2020-12-26 15:30:37

如果将正则表达式取为面值(可能是个错误),则应该在regex周围使用单引号:

代码语言:javascript
复制
find . -regex 'Screen*.*?.png'

这将阻止shell展开它,将其留给find处理。然后,要将文件移动到~/screenshots目录(更改名称以匹配要使用的目录),如果您有GNU mv,可以使用:

代码语言:javascript
复制
find . -regex 'Screen*.*?.png' -exec mv -t ~/screenshots {} +

这将执行一个mv命令将多个文件移动到目标目录,从而减少执行mv的次数。它可能仍然被多次执行,但它将比替代方案少得多。

如果您没有带有(非常有用的) mv选项的GNU -t,那么您应该使用:

代码语言:javascript
复制
find . -regex 'Screen*.*?.png' -exec mv {} ~/screenshots ';'

这会对找到的每个文件执行一个mv命令,但更便于移植。

您遇到的主要问题是,shell正在扩展您所写的文件名列表,然后find不理解您的意思。使用引号可以防止shell展开“regex”。您可以将一个echo添加到mv之前的其他命令中,以查看将执行什么。

但是,我不确定你是否知道你的regex匹配什么。不清楚给定的正则表达式是否是find的有效正则表达式--尽管它主要是作为一个PCRE (与Perl兼容的)正则表达式工作的。默认情况下,GNU find使用GNU 正则表达式,但您可以控制它使用的正则表达式的方言。可用的选项包括Emacs、POSIX Awk、POSIX基本正则表达式(BRE)、POSIX egrep和POSIX扩展正则表达式(ERE)。不包括PCRE。您所提供的更像是一个shell glob,-name运算符处理全局名称。

很可能您应该使用-name操作符,使用以下命令:

代码语言:javascript
复制
find . -name 'Screen Shot *.png' -exec mv -t ~/screenshots {} +
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65457881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档