ワイルドカードから除外するには、findを使用します(*)。

ワイルドカードから除外するには、findを使用します(*)。

ワイルドカードフォルダ名でファイルを検索し、そのワイルドカードフォルダ内のファイル数を数えるbashscriptコマンドがあります。計算から除外するテストフォルダがあります。

これは私の命令です。

echo $(date "+%b %_d")
echo "$today"
sr_today=$(find /mnt/data/project_data/web_collab/mailbox/*/sr_pdf/*.pdf -type f -ls | grep "$today" | wc -l)

メールボックスフォルダには次のファイルがあります。
000000
111111
222222
333333
so on...

000000このfindコマンドから除外したいです。それは可能ですか?どのようなヒントがありますか?

ありがとうございます。

答え1

GNUの使用find:

#!/bin/sh

dir='/mnt/data/project_data/web_collab/mailbox/'

sr_today=$(find "$dir" \
             ! -path '*/000000/*' \
             -newermt '12am today' \
             -ipath '*/sr_pdf/*.pdf' |
           wc -l)
  • GNUfindのオプションは-newermtGNUdate -dtouch -dman find-newerXY

  • 最後の-ipath述語は大文字と小文字を区別しないため、*.PDF、*.pDfなどと一致します。残念ながら、sr_pdfディレクトリを一致させるときは大文字と小文字を区別しません。たとえば、一致させたくないSR_PDFサブディレクトリがあり、すべての.pdfファイル拡張子が小文字である-ipathことがわかります-path

    または、大文字と小文字を区別するパスのsr_pdf一致、および大文字と小文字を区別しない*.pdfファイルの一致の場合は、-ipathこの行を次に置き換えます。

      -path '*/sr_pdf/*' \
      -iname '*.pdf' | 

答え2

まず、この長いパスを使用するには、一意の変数名を指定することをお勧めします。コードを読みやすくし、タイプミスなしでどこでも同じ名前を使用し、必要に応じて簡単に変更できるようにします。

MAILBOX=/mnt/data/project_data/web_collab/mailbox

数百未満のPDFファイルを処理する必要がある場合は、以下を試してください。

echo "${MAILBOX}"/*/sr_pdf/*.pdf | grep -v /00000/ | grep "$today" | wc -l

より一般的な解決策が必要な場合は、次のようにします。

find "${MAILBOX}" -path '*/sr_pdf/*.pdf' | grep -v /00000/ | grep "$today" | wc -l

関連情報