我有一些像这样生成的图像:a.jpg a_3558.jpg a_3560.jpg a_3561.jpg,现在我想找出a.jpg,只是它,然后把它移到另一个文件夹,怎么写命令。
答案 0 :(得分:1)
尝试以下find
命令,该命令在要存储要移动的文件的目录中使用sed
正则表达式。
find . -regextype sed -regex ".*/[a-zA-Z0-9]\+\.jpg" -exec mv "{}" /path/to/destination \;
OR
find . -regextype sed -regex ".*/[^._]\+\.jpg" -exec mv "{}" /path/to/destination \;
<强>更新强>
mv $(find . -name "*.jpg" -type f | grep -P '^(?!.*_\d+\.jpg).*') /path/to/destination
答案 1 :(得分:1)
仅当您不知道a.jpg
的位置时,且仅当您知道只有a.jpg
find . -type f -name "a.jpg" -exec mv "{}" /anotherfolder \;
答案 2 :(得分:0)
要使用正则表达式执行此操作,您可以执行以下操作:
find /basefoldertosearch -regex '.*/a\.jpg' -exec mv "{}" /anotherfolder \;
注意:模式匹配整个路径,而不仅仅是文件名。第一个点,没有&#34; \&#34;在它之前,将匹配任何东西(并且,因为星星,任何数量)。 &#34;。&#34;在文件名中,因为它有一个&#34; \&#34;在它之前,将匹配一个点。因此,此模式将匹配以&#34; /a.jpg"结尾的任何路径+文件名。由于这包括&#39; *&#39;,因此必须引用它。
或者,由于您知道确切的文件名,因此可以搜索特定的文件名。
find /basefoldertosearch -name a.jpg -exec mv "{}" /anotherfolder \;
请注意,这个不包含路径。它也不是正则表达式;它会搜索与指定文件完全相同的文件名。在这种情况下,因为它没有&#39; &#39; (并且&#39; &#39;实际上不会起作用),它不需要引用。
请注意,如果其中任何一个找到多个匹配项,它会将所有这些匹配项一个接一个地复制到同一个目标位置;每个都会覆盖前一个,你将得到它找到的最后一个文件。
其他:阅读下面的评论后,也许这就是你要找的东西:
find /basefoldertosearch ! -regex '.*[0-9].*' -type f -exec mv "{}" /anotherfolder \;
这会发现所有不符合(因为!
)与正则表达式匹配的内容:任何字符.*
,后跟数字[0-9]
,后跟任何其他字符{{1} }。然后从列表中删除任何不是普通文件(例如导演)的内容(否则您将移动.*
,并且找不到任何事情要做!)