複数のファイルの名前を変更し、gzipで圧縮して10日以上経過したファイルを削除します。

複数のファイルの名前を変更し、gzipで圧縮して10日以上経過したファイルを削除します。

私はLinux/Unixに初めて触れ、段階的に学んでいます。残念ながら、今日の面接で(確かに知らなかった)やるべきことがあって驚きました。 Bashスクリプトの準備を求められました。

  • .logの名前を変更します。ファイルを(名前)。(日付).log。(元の名前の残りの部分)に保存し、.gzアーカイブとしてgzipします。

  • 10日を過ぎた(名前)。(日付).log。(元の名前の残りの部分).gzファイルを削除します。

質問しても遅すぎませんでした。どうなったか教えてくれてありがとう。

ベストアンサー1

GNUツールを使用していると仮定すると、次のことが行われます。

find . -type f \( -name '*.[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9].log.*.gz' \
       \( -mtime -10 -o -delete -o -true \) -o -name '*.log.*' ! -name '*.gz' \
       \( -mtime +9 \( -delete -o -true \) -o -printf '%TF/%p\0' \) \) |
  while IFS=/ read -rd '' date file; do
    basename=${file##*/}
    dirname=${file%/*}
    newfile=$dirname/${basename%.log.*}.$date.log.${basename##*.log.}
    mv "$file" "$newfile" && gzip "$newfile"
  done

おすすめ記事