【问题标题】:Find shell script - logs (SUSE Linux, bash, if, find)查找 shell 脚本 - 日志(SUSE Linux、bash、if、find)
【发布时间】:2015-11-30 12:10:06
【问题描述】:

我在 shell 脚本中的 find 命令有问题。

我的脚本找到档案,然后从中解压缩一些日志并将结果 tar 升级并删除在进程中创建的文件。

还有一个问题,即使脚本没有找到存档或日志,它也会执行所有操作,结果它会创建空 tar。姓名:

date_patern_patern.tar

我尝试使用 if 语句或 && 和 || 来修复它运营商,但我无法处理,请您指导我怎么做?

我已经修改了脚本:

#!/bin/bash

printf " -----\nSerch date: $1 \n"
printf "Serch patern: $2 \n"
printf "serch patern: $3 \n -----\n\n"

printf "Serch archives:\n"
mkdir /cc/xx/logs/aaa/envelop/tmp

find archives/ -name "$1_*_messages.tar.gz" -exec cp {} tmp \;
    ls -l tmp/$1_*_messages.tar.gz || exit 1
    cd tmp
    tar -xf $1_*_messages.tar.gz --wildcards --no-anchored "*$2_$3*"
    printf "Find envelop:\n"
    ls -l alsb-message/ || exit 1
    mv alsb-message $1_$2_$3
    tar -cvf $1_$2_$3.tar $1_$2_$3
    mv $1_$2_$3.tar ..
    rm *.gz
    rm -R $1_$2_$3
    cd ..
    rm -r tmp

还有一个问题,我希望我的脚本在搜索时停止,并且在 schript 搜索时在示例中找不到模式:

./serch_script.sh 20151110 patern2 patern3 

它没有找到 parern2 或 patern3 我希望它停止但它再次 empyt .tar 我试图像 Prasanna 所说的那样做,但在这种情况下它不起作用,

【问题讨论】:

标签: linux bash shell if-statement find


【解决方案1】:

请替换以下行

ls -l tmp/

下面一行

ls -l tmp/$1_*_messages.tar.gz || exit 1

基本上使用此代码,如果 tmp 目录中没有符合您条件的文件,您将运行 exit 1

【讨论】:

  • 它帮助了谢谢。但是还有另一个问题我希望我的脚本在搜索时停止并且在示例中当 schript 搜索时找不到模式:./serch_script.sh 20151110 patern2 patern3 并且它没有找到 parern2 或 patern3 我希望它停止但它会执行 empyt tar insted。
  • 尝试将ls -l alsb-message/ || exit 1 更改为ls -l alsb-message/* || exit 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2013-01-05
  • 2012-12-29
相关资源
最近更新 更多