
ログ ファイルがどんどん大きくなっているので、バックアップ スクリプトを作成しようとしています。現在のファイル (たとえば、secure
のファイル/var/log/
) をコピーし、そのファイルからコンテンツを削除します。しかし、 のような名前のファイルもいくつかありsecure.1
、secure.2
これらすべてを数えて、数が多い場合は2
すべてをアーカイブしたいのですが、これらのファイルを検索したり、数えたりする方法が見つかりません。最初に思いついたのは、次のことです。
find /var/log/ -name *.1 | wc -l
1
これは常に1 つのファイルとして印刷されますsecure.1
。 または同様の数値の範囲を指定できる for ループで、どのようにカウントできますか{1..5}
。 これらのファイルを分割して 1 つにし、バックアップまたは削除などを行う方法はありますか。 または、まず、最終的に number になるすべての数値を見つけるにはどうすればよいですか。
答え1
シンプルに-name
:
find /var/log -name '*.[2-9]'
または任意の数字の場合:
find /var/log -name '*.[[:digit:]]'
または、数字の後に他の文字が使用できる場合:
find /var/log -name '*.[2-9]*'
答え2
.
[1~5]の範囲の数字で終わるファイル名を検索します。
find /var/log/ -type f -regextype sed -regex ".*\.[1-5]$"
答え3
なぜ...ではないのか?
for log in /var/log/*.[1-5]
do whatever to "$log"
done
find
私の知る限り、 は必要ありません。シェルは と同じ glob を使用します-name
。また、すべてのファイルが 1 つのディレクトリ内にある場合... もちろん、関心のあるサブディレクトリがある場合は、 がfind
役立つ可能性があります。シェルでツリーをたどるのは面倒な場合があります。