数字で終わるファイルを検索

数字で終わるファイルを検索

ログ ファイルがどんどん大きくなっているので、バックアップ スクリプトを作成しようとしています。現在のファイル (たとえば、secureのファイル/var/log/) をコピーし、そのファイルからコンテンツを削除します。しかし、 のような名前のファイルもいくつかありsecure.1secure.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役立つ可能性があります。シェルでツリーをたどるのは面倒な場合があります。

関連情報