Linuxで変数を特定するのに問題がある

Linuxで変数を特定するのに問題がある

以下は私が試しているコードです。

{    
echo "Enter dirname and hit Return"
read input1
echo "Enter a pattern to be searched for in the current directory"
read input2
find /*/${input1}/*/logs/*/*/*/* -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "${input2}"' {} \;
}

input1が一致している間、input2は一致しないようです。そして、input1のすべての出力を取得しますが、input2に対しては一致しません。

目的は、すべての.gzファイルを読み、キーワードinput2一致を取得することです。

ベストアンサー1

呼び出された「内部」スクリプトは変数findにアクセスできません$input2

あなたはこれを行うことができます

find /*/"$input1"/*/logs/*/*/*/* -name '*.gz' \
    -exec sh -c 'gzip -cd "$1" | grep -e "$0"' "$input2" {} \;

これにより、値が$input2内部スクリプトに渡され、使用可能になり、$0ファイル名パラメータはになります$1

または、findファイルを解凍して出力find全体をフィルタリングすることもできます。

find /*/"$input1"/*/logs/*/*/*/* -name '*.gz' \
    -exec gzip -cd {} + | grep -e "$input2"

find指定された最上位ディレクトリのすべてのサブディレクトリにすでに移動しているため、ファイル名globの一部を省略して代わりに使用できます(-mindepth 4このfindオプションをサポートしている場合)、-type f興味のある項目のみを表示するために追加できます。一般ファイルから:

find /*/"$input1"/*/logs -mindepth 4 -type f -name '*.gz' \
    -exec gzip -cd {} + | grep -e "$input2"

おすすめ記事