Linux:如何获取名称以大于10的数字结尾的文件

时间:2012-07-27 19:22:24

标签: linux bash filenames sh

我有一些文件名如下:'abcdefg_y_zz.jpg' 'abcdefg'是一个数字序列,而'y'和'zz'是字母。 我需要获取所有数字序列以大于10的数字结尾的文件。“fg”大于10的文件。

有没有人知道如何在bash脚本中执行此操作?

6 个答案:

答案 0 :(得分:2)

好的,从技术上讲,基于你的所有信息...

ls | grep '[0-9]{5}[1-9][0-9]_[[:alpha:]]_[[:alpha:]]{2}.jpg'

答案 1 :(得分:1)

这个怎么样?只需排除位置f为0的那些。

ls -1 | grep -v "?????0?_?_??.jpg"

<强>更新 既然你想要&gt; 10而不是&gt; = 10,你也需要排除10。所以这样做:

ls -1 | grep -v "?????0*_?_??.jpg" | grep -v "??????10_?_??.jpg"

答案 2 :(得分:0)

更多脚本

#!/bin/bash
for i in seq FIRST INCREMENT LAST
do
cp abcde$i_y_zz.jpg /your_new_dir //or whatever you want to do with those files
done

所以在你的示例中,seq将是

for i in seq 11 1 100000000

答案 3 :(得分:0)

如果文件名按顺序命名,则此awk解决方案有效:

ls | awk 'BEGIN { FIELDWIDTHS = "5 2" } $2 > 10'

解释

  • FIELDWIDTHS = "5 2"表示$1将引用前5个字符,$2代表下2个字符。
  • 当字段2大于10时,
  • $2 > 10匹配并隐式调用默认代码块,即'{ print }'

答案 4 :(得分:0)

只需一个流程:

ls ?????+(1[1-9]|[2-9]?)_?_??.jpg

答案 5 :(得分:0)

到目前为止提供的所有解决方案都很好,但是任何有shell编程经验的人都知道解析ls从来不是一个好主意,必须避免。这实际上不适用于这种情况,我们可以假设文件的名称遵循某种模式,但这是一个应该被记住的规则。更多解释here

使用GNU find可以更安全地实现你想要的东西 - 假设你在文件所在的目录中运行命令,它看起来像这样:

find . -regextype posix-egrep -regex '\./[0-9]{5}[1-9][0-9]_[[:alpha:]]_[[:alpha:]]{2}.jpg$'