私は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
答え2
#!/bin/bash
workdir="/tmp/myfilestomove"
#cd "$workdir"
[ ! -e "$workdir" ] && exit
find -type f "$workdir" | grep -v '.gz' | while read file; do
filedate="$(date -r "$file" +%d%m%Y)"
basename="${file%.*}"
extension="${file##*.}"
echo mv "$file" "${basename}.${filedate}.${extension}"
echo gzip "${basename}.${filedate}.${extension}"
done
find -type f -mtime +10 "$workdir" | while read file; do
echo rm "$file"
done
スクリプトをテストした場合にのみechoを削除し、初めて使用する前にファイルをバックアップしてください。