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
로 변경되었습니다.DATETIME
date
다음, rm ~/env.*.txt
glob을 와일드카드로 사용하여 사용자의 $HOME 디렉터리 또는 ~/에 있는 모든 파일을 제거하여 파일 이름의 정적 부분 또는 고정 부분만 일치하도록 합니다.
이 스크립트를 사용하여 생성된 모든 출력 파일은 처리되어야 하며 홈 디렉터리에서 제거되어야 합니다.
파일이 없으면 사용자는 파일이 존재하지 않는다는 출력 오류 메시지를 터미널에 수신해야 합니다. 이 메시지는 무시할 수 있으며 이후에 스크립트가 실행될 때 표시되어서는 안 됩니다.
그리고 평소에 티셔츠는 별 문제가 되지 않기 때문에 습관적으로 티셔츠 를 입는 tee
편이 아닙니다 .>>
마지막으로 echo
여기서는 여러 번 사용할 필요가 없습니다. 파일에 쓸 다음 두 줄을 포함하여 첫 번째 줄에 열린 큰따옴표를 사용하고 마지막 줄에 닫힌 큰따옴표로 끝낸 다음 출력을 tee
파일로 파이프했습니다.
를 사용하면 tee
파일에 기록된 내용이 터미널에 인쇄되어 cat
중복됩니다.
또한 -a
다음 플래그를 사용하여 출력을 기존 파일 끝에 새 줄로 추가할 수 있습니다.tee
tee -a