すべてを削除するスクリプトですが、すべてのサブディレクトリの最新のバックアップ ファイルを 1 つ保持します。

すべてを削除するスクリプトですが、すべてのサブディレクトリの最新のバックアップ ファイルを 1 つ保持します。

次のスクリプトは単一のフォルダーに対して機能しますが、すべてのサブディレクトリを反復処理したいと思います。

ls /home/user/Desktop/cron_database_hourly/*/*_[012][0-9]*.zip | head -n -1 | \
   while read -r f; do rm "$f"; done

答え1

おそらく次のような方法でも大丈夫でしょう(未テスト) -

for each in `find -type d /home/usr/Desktop/cron_database/hourly`
do
   ls -t $each/_[012][0-9]*.zip | head -n -1 | \ while read -r f; 
       do 
           rm "$f" 
      done
done

「for each」ループはすべてのディレクトリのリストを検索し、ls に「-t」を追加すると、最新のものを先頭にして日付順に並べ替えられます。

関連情報