本番サーバーがあります。特定のオブジェクトのディレクトリが1つありますが、別のネットワークノードからファイルを収集した後もファイルが蓄積されます。したがって、そのサブディレクトリには2021年5月のファイルが含まれます。通常、1時間ごとに1日分のサブディレクトリを作成し、そのサブディレクトリにファイルをプッシュします。サブディレクトリ構造 -
次のコマンドを使用して、find . -type f -mtime +2 | xargs ls -ltr
2日前のファイルを一覧表示して削除しました。
ところで確認命令を実行してみると、意外なやり方でソートされていることがわかりました。
上記のように、理想的には10-03ファイルを最初に短縮し、次に11-03ファイルを短縮する必要がありますが、正反対です。もう1つのことは、その日付(18-03)のファイルも一覧表示することです。だから誰かがそれについて少し明らかにすることができますか?
ディレクトリサイズは11Gです。そして、ファイルは通常1分ごとに積み重なっていますが、これが影響しますか?
ディストロ-Red Hat Enterprise Linuxサーバーバージョン7.6(Maipo)
ベストアンサー1
find . -ctime +2
ファイルレポート最後に変更されたステータス時間3日以上経過しました(find
開始時刻とファイルのctimeの差(整数日数に丸め)が2より大きい)。
ctime
印刷できる内容は、ls -lc
ファイルの内容が変更されると更新されます(アクセス時間を除く)。ディレクトリのエントリ名が変更されたとき、新しいディレクトリからリンクが解除されたとき、その内容が、権限またはその他のメタデータがあるときに変更...
ls -l
デフォルトで表示され、デフォルトls -t
でソートされるタイムスタンプは次のとおりです。最後の修正。この値は、内容が変更されたときにのみ更新されます(コマンドを使用して任意に設定することもできますtouch
)。これは次のようになります。ファイルコンテンツの作成時間。
その他最後のアクセス時間、一部のシステムでは出生時間また〜として知られています作成時間、一般的にはあまり良くないが最後の修正。最新バージョンのGNU ls
(RHEL7システムにはありません)の場合ls -l --time=birth
またはとして表示されることがありますls -l --time=creation
。
2日以上前に最後に変更された一般ファイルを見つけて渡し、ls
最も古いものから最新の順にリストするには、次のようにします。
find . -type f -mtime +1 -exec ls -lrtd {} +
which(withを除く)で処理できない出力を使用しないでくださいxargs
。find
find -print0 | xargs -r0...
ただし、複数のインスタンスを実行できます。xargs
これにより、独立してソートされた複数のファイルバッチが出力されます。find -exec cmd {} +
cmd
これを防ぐには、zsh
次の方法を使用して実行できます。
autoload zargs
zargs -- ./**/*(D.m+1Om) -- ls -Uld
または、xargs
分割にGNUを使用してください。
print -rNC1 -- **/*(ND.m+1Om) | xargs -r0 ls -Uld --
(ソートされていないGNU拡張です-U
(すでにソートされているため必要ありません)。他の実装に置き換えることができます)。ls
zsh
-rt
ls
いつでもまったく分割しないように試みることができますが、コマンドに渡して確認できる長さまたは引数+環境の制限が発生する可能性があります。パラメータリストが長すぎます。間違い:
ls -lrtd -- **/*(D.m+1oN)
find
zsh、sort
およびsed
ユーティリティのGNU実装を使用してzshをインストールできない場合xargs
(ls
RHEL7で表示されます)、次のことができます。
find . -type f -mtime +1 -printf '%T@:%p\0' |
LC_ALL=C sort -zn |
LC_ALL=C sed -z 's/^[^:]*://' |
xargs -r0 ls -Uld
find
ファイルを数字で印刷し、mtimeで手動でソートし、次のように%T@
ソートします。これはすべてNULで区切られたレコードを使用して実行されるため、任意のファイルパスを使用できます。sort -n
sed
xargs
ls
-U
とにかくGNUを使用してこれらのファイルを削除するには、適切な述語をfind
使用します-delete
。
find . -type f -mtime +1 -delete