代码之家  ›  专栏  ›  技术社区  ›  gurun8

在目录中只列出数字文件名

  •  11
  • gurun8  · 技术社区  · 14 年前

    我有一个带有数字文件名的文件列表(例如#.php、##.php或####.php),我想一下子复制/移动这些文件。

    有人知道 ls grep 联合命令来完成这个目标?

    我确实有这么多:

    ls -al | grep "[0-9].php"
    
    5 回复  |  直到 14 年前
        1
  •  0
  •   Community CDub    7 年前

    列出文件时可以使用正则表达式:

    ls [0-9]*
    

    在上述问题上,这是一个简单而简约的方法,但我认为更好的解决方案是

    ls -al | grep -E '^[0-9]+\.php$'
    

    正如Uncleziv所解释的 below

        2
  •  8
  •   Dennis Williamson    14 年前

    在Bash中,可以使用扩展模式匹配:

    shopt -s extglob
    ls -l +([0-9]).php
    

    123.php
    9.php
    

    a.php
    2b.php
    c3.php
    
        3
  •  7
  •   UncleZeiv    14 年前

    修改如下:

    ls -al | grep -E '^[0-9]+\.php$'
    

    -E 激活扩展正则表达式。

    + 要求必须至少出现一次前面的组。

    \. 转义点,否则表示“任意字符”

    ^ $

    $

        4
  •  4
  •   unwind    14 年前

    使用查找:

    $ find . -regex '^[0-9]+\.php' -exec mv '{}' dest/ ';'
    

    请注意 -regex 参数执行的是搜索,而不是匹配,这就是为什么“^”将它锚定到开头。这还假设文件与运行命令时所在的目录(.)相同。

    这个 {} 骗局 mv 命令替换为 find 使用找到的文件名。

        5
  •  2
  •   Philipp    14 年前

    find (可能与 -XXXdepth 选项):

    find . -mindepth 1 -maxdepth 1 -regex '^[0-9]+\.php' -exec mv '{}' dest/ ';'
    

    pattern='^[0-9]+\.php$'
    for file in *.php
    do
        [[ $file =~ $pattern ]] && echo "$file"
    done
    

    不要使用 ls grep .