z/OS (メインフレーム・バージョン 2.1) Unix システム・サービス領域で、次のように find に関連したコマンドを実行しようとしました。
次のディレクトリ構造があるとします。
/tmp
/dir1-include
/dir2-exclude
/dir3-include
/dir4-exclude
dir1-include
90日より古いすべてのファイルの合計を計算しようとしていますdir3-include
。次のコマンドが機能しないようです。
find /tmp/ \( -path /dir2-exclude -prune -o \
-path /dir4-exclude -prune \
\) \
-o -type f -mtime +90 | wc -l
それは私に以下を与えます:
FSUM6372 Unknown option "-path"
Usage: find directory ... expression`
答え1
これを行う方法はいくつかあります。以下のオプションはすべてz / OSに適用されます。
find
これをサポートしておらず、ファイル-path
名に改行文字(パイプ接続)が含まれていないと仮定すると、wc
以下を使用して問題を解決できますgrep
。
find /tmp/ -type f -mtime +90 | grep -v /tmp/dir2-exclude | grep -v /tmp/dir4-exclude | wc -l
除外するディレクトリがパターンを共有する場合(保持する項目を除外せず)、次のように単純化できます。
find /tmp ... | grep -cv '/tmp/dir.*-exclude'
...ディレクトリまたはファイル名に改行文字が含まれていると、findの出力が誤って評価されることをもう一度理解してください。
find
複数の開始パスをサポートし、含めるパスがパターンを共有する場合は、次の方法で問題を解決できます。
find /tmp/dir*-include -type f -mtime +90 | wc -l
また、-pruneオプションは上記のディレクトリの下に落ちません。
find /tmp/ -type d -name "/dir2-exclude" -prune -o -type d -name "/dir4-exclude" -prune -o -type f -mtime +90 | wc -l