#!/usr/bin/env bash
# usage: wttr [location], e.g. wttr Berlin, wttr New\ York
# Standard location if no parameters were passed
location=''
language=''
time=`date`
# Expand terminal display
if [ -z "$language" ]; then
language=${LANG%_*}
fi
curl \
-H -x "Accept-Language: ${language}" \
-x wttr.in/"${1:-${location}}" |
head -n 7 |
tee /home/of/weather.txt |
tee -a /home/of/weather.log |
tee /home/of/BACKUP/weather_"$time".txt
#cp weather.txt /home/of/BACKUP
#mv -f /home/of/BACKUP/weather.txt /home/of/BACKUP/weather_"$time".txt
我對 Linux Bash 和 Shell 腳本非常陌生,無法弄清楚以下內容。我對上面的 shell 腳本有疑問。到目前為止它作業正常(從網站卷曲 ASCII 資料并將其寫入weather.txtand .log)。它也在 crontab 中設定為每 5 分鐘運行一次。現在我需要使用檔案名備份weather.txtunder /home/of/, in 。我嘗試洗掉 ( ) 中的舊時間戳檔案,然后在每次運行 cronjob 時復制并重命名該檔案。我嘗試了管道等,但不知何故我最終產生了許多重復,因為當我嘗試首先洗掉檔案夾的內容時,由于時間戳檔案名不同或根本沒有。我只需要一個as的備份檔案/home/of/BACKUPweather_<timestamp>.txtrm weather*.txt/home/of/BACKUPcpmvweather.txtweather_<timestamp>.txt它每 5 分鐘更新一次,實際時間戳位我無法弄清楚。
uj5u.com熱心網友回復:
如果我完全理解你的問題,那么簡單
rm -f /home/of/BACKUP/weather_*.txt
cp /home/of/weather.txt /home/of/BACKUP/weather_"$time".txt
cp讓您重命名要復制到的檔案;cp分開then是沒有意義的mv。
為方便起見,您可能希望cd /home/of不必拼出完整路徑或將它們放入變數中。
dir=/home/of
rm -f "$dir"/BACKUP/weather_*.txt
cp "$dir"/weather.txt "$dir"/BACKUP/weather_"$time".txt
如果您用完了cron名為的用戶,of那么您當前的作業目錄將是/home/of(盡管如果您需要能夠從任何地方手動運行腳本,則不能保證)。
顯然,確保通配符與您實際想要保留的任何檔案都不匹配。
順便說一句,您可以tee稍微簡化命令。如果這應該只更新檔案而不向終端列印任何內容,您甚至可以使用
curl \
-H -x "Accept-Language: ${language}" \
-x wttr.in/"${1:-${location}}" |
head -n 7 |
tee /home/of/weather.txt \
>>/home/of/weather.log
我取出了tee備份檔案,因為無論如何你都要立即洗掉它。curl您也可以先清空備份目錄,但如果失敗,您將沒有備份。
如果您也想繼續列印到終端,可能會/dev/null在cron作業中運行帶有重定向到的腳本,以避免您的電子郵件收件箱被未讀的輸出副本填滿。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/478106.html
