1

「date-2012-01-01_12_30」という名前のサブフォルダー内のすべてのフォルダーを削除する再帰スクリプトを作成する必要がありますが、最新の 2 つを残します。

/var/www/temp/updates/ 次に、「日付」および「コード」別の数百のフォルダー

例えば

/var/www/temp/updates/2012-01-01/temp1/date-2012-01-_12_30
/var/www/temp/updates/2012-01-01/temp1/date-2012-02-_13_30
/var/www/temp/updates/2012-01-01/temp1/date-2013-11-_12_30
/var/www/temp/updates/2012-01-01/temp2/date-2012-01-_12_30

検索を使用してフォルダーを取得することを考えていましたが、削除できるフォルダーを知る方法がわからないため、スクリプトはそのサブフォルダー内の日付フォルダーと最新のフォルダーを知る必要があります

うーん、どんな助けでもいいですか?

4

2 に答える 2

1

これはうまくいくはずです:

find /var/www/temp/updates/ -type d -name "date-*" -printf '%T@ %p\n' | sort -n | head -n -2 | cut -f2- | xargs rm -rf

findディレクトリ パスと最終変更時刻を出力します。次に、これがソートされ、最後の 2 つを除くすべてが削除されます。

于 2013-01-29T15:21:59.160 に答える
1

すべてのフォルダーがサブディレクトリ、、temp1...temp2にある場合は、単に使用できますls -tr

ls -dtr /var/www/temp/updates/2012-01-01/temp*/* | head -n -2 | xargs rm -rf

これにより、すべてのフォルダが時間順に並べられて一覧表示されls -dtr、最新の 2 つを除くすべてのフォルダが取得されhead、残りのフォルダが削除されますxargs rm -rf

于 2013-01-29T15:18:56.870 に答える