저는 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를 제거하고 처음 사용하기 전에 파일을 백업하십시오.