【问题标题】:Solaris: Regex how to select files with certain filenameSolaris:正则表达式如何选择具有特定文件名的文件
【发布时间】:2016-10-07 11:24:03
【问题描述】:

首先,服务器运行 Solaris。 我的问题背景是 Informatica PowerCenter。

我需要列出位于收件箱目录中的文件。基本上,结果应该是按文件类型列出的一个文件列表。不同的文件类型由文件名区分。我不想在每次新文件类型开始存在时更新脚本,所以我正在考虑一个带有正则表达式、收件箱目录和文件列表的参数化 shell 脚本

一个例子:

/Inbox/ABC.DEFGHI.PAC.AE.1236547.49566
/Inbox/ABC.DEFGHI.PAC.AE.9876543.21036
/Inbox/DEF.JKLMNO.PAC.AI.1236547.49566

... 必须生成 2 个包含列出文件的路径和文件名的列表文件:

/Inbox/PAC.AE.FILELIST
-->/Inbox/ABC.DEFGHI.PAC.AE.1236547.49566
-->/Inbox/ABC.DEFGHI.PAC.AE.9876543.21036
/Inbox/PAC.AI.FILELIST
-->/Inbox/DEF.JKLMNO.PAC.AI.1236547.49566

【问题讨论】:

    标签: regex shell solaris filelist


    【解决方案1】:

    假设所有输入文件都遵循您指定的约定(按点分割时,第 3 列和第 4 列确定类型),此脚本可能会解决问题:

    #! /usr/bin/env bash
    
    # First parameter or current directory
    INPUTDIR=${1:-.}
    # Second parameter (or first input directory if not given)
    OUTPUTDIR=${2:-$INPUTDIR}
    # Filter out directories
    INPUTFILES=$(ls -p $INPUTDIR | grep -v "/")
    
    echo "Input: $INPUTDIR, output: $OUTPUTDIR"
    
    for FILE in $INPUTFILES; do
      FILETYPE=$(echo $FILE | cut -d. -f3,4)
      COLLECTION_FILENAME="$OUTPUTDIR/${FILETYPE:-UNKNOWN}.FILELIST"
      echo "$FILE" >> $COLLECTION_FILENAME
    done
    

    用法:

    ./script.sh Inbox Inbox/collections
    

    将从收件箱中读取所有文件(不是目录),并将集合文件写入收件箱/集合。集合内的文件名应按字母顺序排序。

    【讨论】:

      猜你喜欢
      • 2012-01-01
      • 1970-01-01
      • 2017-04-08
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      相关资源
      最近更新 更多