1

首先,服务器运行 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
4

1 回答 1

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

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

于 2016-10-25T20:56:09.187 回答