이 스크립트는 특정 패턴으로 파일 이름을 생성하고 이전에 동일한 패턴으로 생성된 파일(있는 경우)을 삭제합니까?

이 스크립트는 특정 패턴으로 파일 이름을 생성하고 이전에 동일한 패턴으로 생성된 파일(있는 경우)을 삭제합니까?

YEARMONTHDAYHOURMINSEC에 호스트 이름과 날짜를 저장하는 파일을 생성하고 시스템의 모든 환경 변수를 인쇄하고 이전에 생성된 모든 파일을 디렉터리에 삭제하고, 그렇지 않으면 새 파일을 생성하는 스크립트를 작성하고 싶습니다.

따라서 스크립트는 해당 디렉토리를 검색하여 해당 패턴의 이전 파일을 삭제해야 하지만, 다른 파일은 삭제하면 안 됩니다.

#!/bin/bash

time=$(date +"%Y%m%d%H%M%S")
echo $(hostname) >>env.$time.txt
echo date:$time >>env.$time.txt
echo $(env)>>env.$time.txt
cat env.$time.txt

답변1

기존 스크립트에 대한 간단한 수정은 다음과 같습니다.

#!/bin/bash

# set location of backup such as `/var/log`
envDir=/path/to/dir

mkdir -p $envDir/junk

mv $envDir/env.*.txt $envDir/junk 2> /dev/null

time=$(date +"%Y%m%d%H%M%S")
echo $(hostname) >> $envDir/env.$time.txt
echo date:$time >> $envDir/env.$time.txt
echo $(env)>>$envDir/env.$time.txt
cat $envDir/env.$time.txt

rm $envDir/junk/*

echo $(env)실제로 사용할 수 없는 데이터를 생성하는 yours 와 같은 일부 사항은 개선될 수 있습니다 . 대신 env, 줄로 구분되어 가져오기가 쉽기 때문에 이렇게 해야 합니다 .

파일 이름을 미리 정의하여 설정과 같은 코드를 단순화하고 유지 관리를 더 쉽게 만들 수도 있습니다.

추가 설명이 포함된 약간 개선된 버전은 다음과 같습니다.

#!/bin/bash

# set location of backup such as `/var/log`
# !!! Update this!
envDir=/path/to/dir

# set backup time
time=$(date +"%Y%m%d%H%M%S")

# set full file name for the backup
envFile=$envDir/env.$time.txt

# make temporary directory and ignore if it already exists
mkdir -p $envDir/junk

# move existing environment backup files to junk until we have our new output
mv $envDir/env.*.txt $envDir/junk 2> /dev/null

hostname >> $envFile
echo date:$time >> $envFile
env >> $envFile
cat $envFile

# remove the backup(s)
rm $envDir/junk/*

답변2

이 스크립트를 테스트했는데 작동합니다. 이 스크립트는 새 파일을 생성하고 사용자의 홈 디렉터리에 기존 파일이 있는 경우 삭제합니다.

#!/bin/bash
DATETIME=$(date +"%Y%m%d%H%M%S")
rm ~/env.*.txt
echo "$(hostname)
date:$DATETIME
$(env)" | tee ~/env.$DATETIME.txt

첫 번째, 그럴 가능성이 더 높아 보였기 때문에 date로 변경되었습니다.DATETIMEdate

다음, rm ~/env.*.txtglob을 와일드카드로 사용하여 사용자의 $HOME 디렉터리 또는 ~/에 있는 모든 파일을 제거하여 파일 이름의 정적 부분 또는 고정 부분만 일치하도록 합니다.

이 스크립트를 사용하여 생성된 모든 출력 파일은 처리되어야 하며 홈 디렉터리에서 제거되어야 합니다.

파일이 없으면 사용자는 파일이 존재하지 않는다는 출력 오류 메시지를 터미널에 수신해야 합니다. 이 메시지는 무시할 수 있으며 이후에 스크립트가 실행될 때 표시되어서는 안 됩니다.

그리고 평소에 티셔츠는 별 문제가 되지 않기 때문에 습관적으로 티셔츠 를 입는 tee편이 아닙니다 .>>

마지막으로 echo여기서는 여러 번 사용할 필요가 없습니다. 파일에 쓸 다음 두 줄을 포함하여 첫 번째 줄에 열린 큰따옴표를 사용하고 마지막 줄에 닫힌 큰따옴표로 끝낸 다음 출력을 tee파일로 파이프했습니다.

를 사용하면 tee파일에 기록된 내용이 터미널에 인쇄되어 cat중복됩니다.

또한 -a다음 플래그를 사용하여 출력을 기존 파일 끝에 새 줄로 추가할 수 있습니다.teetee -a

관련 정보