linux - 查找shell脚本-日志(SUSE Linux, bash, if, find)

标签 linux bash shell if-statement find

我在 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 告诉的那样做,但在这种情况下它不起作用,

最佳答案

请替换以下行

ls -l tmp/

下面一行

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

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

关于linux - 查找shell脚本-日志(SUSE Linux, bash, if, find),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33998372/

相关文章:

linux - 如何向每个 curl 命令发送相同的 cookie?

bash - 减去两个变量

bash - 停止执行 makefile

linux - 如何从 Bash Shell 脚本中的文件执行命令列表

c - 如何使用Xlib获取屏幕刷新率

php - PDO Informix ODBC 驱动程序可与 PHP CLI 一起使用,但不能在浏览器中使用

linux - p4 工具中缺少 perforce reconcile 命令

bash - sed 编辑 csv 文件中的特定列和行

linux - 如何递归查找某个文件并覆盖?

bash - 如何根据可用空间调整进度条的大小?