Solaris:正则表达式如何 select 具有特定文件名的文件
Solaris: Regex how to select files with certain filename
首先,服务器运行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
假设所有输入文件都遵循您指定的约定(按点拆分时,第 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
将从收件箱中读取所有文件(不是目录),并将集合文件写入Inbox/collections。集合中的文件名应按字母顺序排序。
首先,服务器运行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
假设所有输入文件都遵循您指定的约定(按点拆分时,第 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
将从收件箱中读取所有文件(不是目录),并将集合文件写入Inbox/collections。集合中的文件名应按字母顺序排序。