1

我有一个在 AIX 7.1 上运行的 shell 脚本,它的目的是使用 CPIO 归档一堆不同的目录。

我们从名为 synclive_cpio.list 的平面文件中传递要归档到 CPIO 的目录。

这是脚本的片段..

#!/bin/ksh
CPIO_LIST="$BASE/synclive_cpio.list"
DUMP_DIR=/usr4/sync_stage
LOG_FILE=/tmp/synclive.log

run_cpio()
{
while LINE=: read -r f1 f2
do
  sleep 1
  cd $f1
  echo "Sending CPIO processing for $f1 to background." >> $LOG_FILE
  time find . -print | cpio -o | gzip > $DUMP_DIR/$f2.cpio.gz &
done <"$CPIO_LIST"
wait
}

这是我们在 synclive.cpio.list 文件中的内容...

/usr2/devel_config usr2_devel_config
/usr/local usr_local
/usr1/config usr1_config
/usr1/releases usr1_releases

当 CPIO 运行时,它将存档传递的目录中的所有内容。我想做的是尝试排除一些文件扩展名类型,例如 *.log 和 *.tmp,因为我们不需要存档它们。

知道如何更改 run_cpio() 块以支持此功能吗?

谢谢。

4

2 回答 2

2

find命令中排除它们

time find . ! \( -name '*.log' -o -name '*.tmp' \) -print | cpio -o | gzip > $DUMP_DIR/$f2.cpio.gz &

您可以继续添加-o *.suffix到列表中。

于 2013-10-18T17:20:08.533 回答
0

另一种方法是在管道中使用 egrep -v 。我相信这会更有效率。

time find . -print | egrep -v '\.(tmp|log)$' | cpio -o | gz

对我来说,如果列表真的很长,它也更容易阅读和修改。

于 2013-10-19T12:57:41.100 回答