
ワイルドカードフォルダ名でファイルを検索し、そのワイルドカードフォルダ内のファイル数を数える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)
GNU
find
のオプションは-newermt
GNUdate -d
とtouch -d
。man 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