以下は私が試しているコードです。
{
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"