使用正则表达式或名称按名称在范围内查找文件

使用正则表达式或名称按名称在范围内查找文件

自 2008 年以来,我有多个屏幕截图,名称如“screenshot-2010-13-12.jpg”。我需要复制 2010 年至 2019 年以来的屏幕截图。我尝试了 -name 和 -regex 的不同选项,但找不到方法。正则表达式的唯一成功之处在于按格式查找,仅此而已。

答案1

如果您想严格遵守格式,可以使用以下命令:

find . -name "screenshot-201[0-9]-??-??.jpg" -type f

这将搜索名称以 开头screenshot-201,然后有一个数字,然后是破折号、两个字符、破折号、两个字符和.jpg

答案2

要推广到任意范围的日期,zsh您可以执行以下操作:

cp screenshot-????-??-??.jpg(.e['
  [[ $REPLY >= screenshot-2010-02-12.jpg &&
     $REPLY <= screenshot-2019-09-21.jpg ]]']) /some/dir/

或者:

cp screenshot-????-??-??.jpg(.e['
  [[ ${REPLY//[^0-9]} = <20100212-20190921> ]]']) /some/dir/

.例如,复制 2010-02-12 到 2019-09-21 范围内的常规(带有)文件。

如果它们不在当前工作目录中,但您需要在任意级别的子目录中搜索它们:

cp -i -- **/screenshot-????-??-??.jpg(.e['
  [[ $REPLY:t >= screenshot-2010-02-12.jpg &&
     $REPLY:t <= screenshot-2019-09-21.jpg ]]']) /some/dir/

(此处添加是-i为了降低目录中发现多个同名文件的风险)。

相关内容