Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在unix中从目录中提取文件(以数字命名)_Unix - Fatal编程技术网

如何在unix中从目录中提取文件(以数字命名)

如何在unix中从目录中提取文件(以数字命名),unix,Unix,我有一个文件夹,由编号为1、2、3、4、5等的文件组成。这些文件仅以数字命名。除了这些文件,我还有两个文件夹在同一个目录中 我试图从文件名为数字的目录(不包括文件夹和没有数字的文件)中提取最后五个文件。所以我试着做这样的事情: ls /var/lib/myFolder/prog/TEST_DEV/builds/ -t | head -n5 ls -1 | egrep '\b[0-9]+\b' 但这会返回文件以及我的两个目录 然后我尝试了一些类似的方法: ls /var/lib/myFolde

我有一个文件夹,由编号为1、2、3、4、5等的文件组成。这些文件仅以数字命名。除了这些文件,我还有两个文件夹在同一个目录中

我试图从文件名为数字的目录(不包括文件夹和没有数字的文件)中提取最后五个文件。所以我试着做这样的事情:

ls /var/lib/myFolder/prog/TEST_DEV/builds/ -t | head -n5
ls -1 | egrep '\b[0-9]+\b'
但这会返回文件以及我的两个目录

然后我尝试了一些类似的方法:

ls /var/lib/myFolder/prog/TEST_DEV/builds/ -p | tail -5
这也不管用

有关于如何继续的建议吗?

您可以使用或使用解释正则表达式的脚本,如grep

例如,要列出其文件名仅包含数字(一个或多个数字)的所有文件,您可以这样做:

ls /var/lib/myFolder/prog/TEST_DEV/builds/ -t | head -n5
ls -1 | egrep '\b[0-9]+\b'
如您所说,要检索最后5个文件,您需要:

  • 确保使用ls的排序规则,如
    ls-t
    按上次修改日期排序
  • 要从列表中排除目录,应使用正则表达式
    \b[0-9]+\b
    排除末尾包含“/”的文件名,这意味着匹配项从开始到结束都有一个或多个数字。“/”在目录名的末尾可用,因为ls还有
    p
    选项
  • 使用
    tail-5
    命令限制返回的匹配
  • 所以,我想这样的东西对你会有用的:

    ls -1tp | egrep '\b[0-9]+\b' | tail -5
    
    关于这一问题:


    参考一个。

    Shell globbing
    =grep regexps;-。对于这个问题,shell globbing的一个有用示例是
    ls-tp[0-9]
    ,然后您可以跳过第一个
    egrep
    。祝大家好运。@Shelleter-您的
    ls-tp
    将丢失多个数字的文件,例如
    123
    @StephenP;是的,我同意。O.P.特别提到了一位数的文件名,所以我的评论仅限于这一需要。很容易扩展到
    ls-tp[0-9][0-9][0-9]…
    以捕获尽可能多的纯数字文件名。一切都是权衡;-)。祝大家好运。
    -p
    为您提供了一个指标,但您没有使用它。请尝试
    ls/p/a/t/h-t-p | grep-v'/$|..