2016-08-02 104 views
1

我試圖創建一個shell腳本,該腳本將每個腳本運行時使用新名稱的.log文件從一個目錄複製到新目錄。每次在Linux上運行一個shell腳本時創建一個新目錄

例如讓我們說有File1.log,File2.log,File3.log在/home/usr/logs

和運行此腳本時,我希望他們能夠被複制到新的位置/home/usr/savedlogs/Run1,並在下次運行時間。 .. /home/usr/savedlog/Run2等等...

我不知道這是否會被用於:

CP /home/usr/logs/{File1.log,File2.log,File3.log }/home/usr/savedlogs

我希望這是可能的一個shell腳本。謝謝大家提前給予的幫助,非常感謝!

+0

你如何控制腳本的運行計數?是否會運行有限次數或未預測到? – Inian

+0

嗯,我打電話給一個別名cplogs,它執行這個腳本(理想情況下) –

+0

別名cplogs ='。/ scriptname' –

回答

1

如果你不關心遞增目錄名,你可以用一個簡單的時間戳做到這一點:

DIR=$(date +%Y%m%d%H%M%S) 
mkdir $DIR 
cp /home/usr/logs/FileXXX.log /home/usr/savedlogs/$DIR/ 

這隻要你拷貝操作發生小於每秒一次工作。

+0

這將是我考慮的一個選項。非常感謝您的意見。 –

3

下面是一個簡單的腳本,就足夠你的要求:

#!/bin/bash 

# Get the number of Run* directories present 
newnum=$(ls -ld /home/usr/savedlogs/Run* 2>/dev/null | wc -l) 

mkdir -p /home/usr/savedlogs/Run${newnum} 

cp /home/usr/logs/*.log /home/usr/savedlogs/Run${newnum} 

這將從Run0開始,並從那裏繼續進行

+0

這將一次性將所有日誌複製到'Run [0-n]'文件夾,OP想要爲每個腳本運行復制到一個新文件夾。 – Inian

+0

謝謝,你能解釋一下'/ dev/null | wc -l)'部分給我?我喜歡完全理解我正在寫的代碼 –

+0

運行這個幾次後,我有一個文件夾與Run5,8,11,14,17,20 ....等 –

0

您可以嘗試與newDir=$(ls -l /home/usr/savedlogs | grep Run | wc -l)用於獲取現有號碼的目錄。

所以整個腳本看起來就像這樣:

newDir=$(ls -l /home/usr/savedlogs | grep Run | wc -l) 
    mkdir -p /home/usr/savedlogs/Run${newDir} 
    cp /home/usr/logs/*.log /home/usr/savedlogs/Run${newDir} 

第一個文件夾會Run0,未來Run1等等...

相關問題