ディレクトリ内のXMLバックアップファイルであるファイルの末尾に追加された日付に基づいてファイルを削除したいと思います。ファイルは次の基準に従って削除する必要があります。
各セットに12個以上のファイル(各特定のバックアップファイルセットの名前)が含まれている場合、古いファイルは削除され、最新のファイルは同じディレクトリに保存する必要があります。
はい
セット1:Wf_ABCDEF_HGD_AFFGF_DFDF_201601011224.XML
メモ:上記のグループ1のファイルは削除しないでください。
セット2:Wf_ABHGD_AFFGF_DFDF_201101211221.XML
Wf_ABHGD_AFFGF_DFDF_201202211222.XML
Wf_ABHGD_AFFGF_DFDF_201304411223.XML
Wf_ABHGD_AFFGF_DFDF_201406611224.XML
Wf_ABHGD_AFFGF_DFDF_201508811225.XML
Wf_ABHGD_AFFGF_DFDF_201609911226.XML
Wf_ABHGD_AFFGF_DFDF_201707711227.XML
Wf_ABHGD_AFFGF_DFDF_201801081228.XML
Wf_ABHGD_AFFGF_DFDF_201901911229.XML
Wf_ABHGD_AFFGF_DFDF_202001811210.XML
Wf_ABHGD_AFFGF_DFDF_202101511211.XML
Wf_ABHGD_AFFGF_DFDF_202201811212.XML
Wf_ABHGD_AFFGF_DFDF_202301811213.XML
Wf_ABHGD_AFFGF_DFDF_202401911214.XML
Wf_ABHGD_AFFGF_DFDF_202501041215.XML
Wf_ABHGD_AFFGF_DFDF_202601031216.XML
次のファイルは添付日に基づいて古いものですので削除してください。
Wf_ABHGD_AFFGF_DFDF_201101211221.XML
Wf_ABHGD_AFFGF_DFDF_201202211222.XML
Wf_ABHGD_AFFGF_DFDF_201304411223.XML
Wf_ABHGD_AFFGF_DFDF_201406611224.XML
グループ 3:-
Wf_ABCDEFGHIJKLMONM_201101211221.XML
Wf_ABCDEFGHIJKLMONM_201202211222.XML
Wf_ABCDEFGHIJKLMONM_201304411223.XML
Wf_ABCDEFGHIJKLMONM_201406611224.XML
Wf_ABCDEFGHIJKLMONM_201508811225.XML
Wf_ABCDEFGHIJKLMONM_201609911226.XML
Wf_ABCDEFGHIJKLMONM_201707711227.XML
Wf_ABCDEFGHIJKLMONM_201801081228.XML
Wf_ABCDEFGHIJKLMONM_201901911229.XML
Wf_ABCDEFGHIJKLMONM_202001811210.XML
Wf_ABCDEFGHIJKLMONM_202101511211.XML
このグループのファイル数は12個以下なので、上記のファイルを削除しないでください。
ベストアンサー1
そしてfind
バッシュオフセット拡張${parameter:offset:length}
、次のようにすることができます。
find -type f -execdir bash -c 'printf "%s\n" "${@:1:${#@}-12}" ' _ {} +
./Wf_ABHGD_AFFGF_DFDF_201101211221.XML
./Wf_ABHGD_AFFGF_DFDF_201202211222.XML
./Wf_ABHGD_AFFGF_DFDF_201304411223.XML
./Wf_ABHGD_AFFGF_DFDF_201406611224.XML
${#@}
ファイルの総数(または平均パラメータ)を返します。
-name
上記のfindコマンドオプションにパターンを指定して、持っている各ファイルセットに対して繰り返します。
または、スクリプトを介してスキーマをインポートします。
# !/bin/bash
allFILEs=(*.XML)
PATTERNs=$(printf "%s\n" "${allFILEs[@]%_*}" |sort -u)
for pattern in ${PATTERNs[@]};
do
find -type f -name "*${pattern}*" -execdir bash -c '
printf "%s\n" "${@:1:${#@}-12}"' _ {} + 2>/dev/null;
done
どのファイルが削除されるかをテストして確認するには(コマンドでprintf
)を変更しますrm
。find ...