【问题标题】:How to ignore file types from being archived in my shell script?如何忽略文件类型在我的 shell 脚本中存档?
【发布时间】:2013-10-27 15:15:48
【问题描述】:

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

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

这是脚本的 sn-p..

#!/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() 块以支持此功能吗?

谢谢。

【问题讨论】:

    标签: bash shell unix scripting aix


    【解决方案1】:

    find 命令中排除它们

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        相关资源
        最近更新 更多