2010-09-20 143 views
0

我想將日誌文件從一個路徑(源路徑)移動到另一個路徑(目標路徑)。此源路徑和目標路徑存在於一個文本文件中。爲::如何使用shell腳本將文件從一個路徑移動到unix中的另一個路徑

source_path=abc/xyz 
    source_path=pqr/abc 
    desination_path=abcd/mlk 

所以我讀取此文件並存儲在路徑不同variables.i有多個源極路徑,所以我其存儲在充當陣列的varible。如下所示::

sourcePaths=`grep source_path myfile |cut -d= -f2` 
destPath=`grep destination_path myfile |cut -d= -f2` 

和我只有一個目標路徑,我想要移動所有這些文件。 現在我想遍歷所有這些源路徑,找到具有特定擴展名的日誌文件,將這些所有文件壓縮並移至目標路徑。 我使用循環從sourcePaths變量中檢索數據(這只是試用版)。如:;

for i in $sourcePaths 
do 
    echo $i 
done 

任何人都可以幫助我。

非常感謝您的回覆Guys.Now我想在此添加一些過濾器。我想從源路徑中移動10天的文件,並且我想在移動後從源路徑中刪除這些文件。請幫忙

只有一個問題!如果我想存儲包含時間戳的名稱的壓縮文件,以便在目標路徑上不會有重複的文件名。

大家好,還有一個問題。當我用上面的選項壓縮文件時,它會根據它的path.ie創建zip文件中的子文件夾。如果我從src/int/xlog/abc中壓縮日誌文件,並且當我解壓zip文件時,這些新創建的zip文件內容將日誌文件記錄在src/int/xlog/abc/abc.zip中。我不想要這個。我想要的是這個zip文件直接內容abc.zip。不在子文件夾中。

嗨,大家好,我回來了,使用下面的腳本,我能夠創建zip爲基礎pathname.egxyz.zip和abc.zip按使用下面的代碼我上面給出的路徑的文件名多了一個question.Here: :

timestamp=`date +%Y%m%d_%H%M%S` 
zipFile=$destPath/$(basename $sourcePath).$timestamp.zip 

但現在我想創建,如果更具體取決於其源path.Like這個文件名(ieZip文件名)我的文本文件內容

source_path=obj/imp/backup/logs/db1 
source_path=obj/res/input/int/db2 
desination_path=abcd/mlk 

現在我想創建一個zip文件名稱。

backup_logs_db1.zip 
input_int_db2.zip 

意味着我想用最後三個目錄名來創建新的壓縮文件名。它提供的文本文件中的源路徑內容超過三個目錄名稱。

所以任何人都可以幫助我。 提前Thnaks!

回答

2

要創建ZIP壓縮文件,你可以這樣做:

for sourcePath in $sourcePaths 
do 
    zipFile=$destPath/$(basename $sourcePath).zip 
    find $sourcePath -type f -name "*.log" | xargs zip $zipFile [email protected] 
done 

,這將創造

abcd/mlk/xyz.zip(含在ABC/XYZ的所有* .log文件)和
abcd/mlk/abc.zip(含所有的* .LOG下PQR文件/ ABC)

要創建gzip壓縮的檔案,您可以:

for sourcePath in $sourcePaths 
do 
    tarFile=$destPath/$(basename $sourcePath).tar 
    find $sourcePath -type f -name "*.log" -exec tar -uvf $tarFile {} \; 
    gzip $tarFile 
done 

這將創造:

abcd/mlk/xyz.tar.gz(含有下ABC/XYZ所有* .log文件)
abcd/mlk/abc.tar.gz(包含所有* .log文件下PQR/ABC)


移動文件從源頭到dest中,還沒有過去10天內修改,您可以使用此:

for sourcePath in $sourcePaths 
do 
    find $sourcePath -type f -mtime +10 -name "*.log" -exec mv {} $destPath \; 
done 

如果你想使用壓縮和解後刪除輸入文件如下:

for sourcePath in $sourcePaths 
do 
    zipFile=$destPath/$(basename $sourcePath).zip 
    find $sourcePath -type f -mtime +10 -name "*.log" | xargs zip -mT $zipFile [email protected] 
done 

使用date命令生成一個時間戳。該標誌是:

%Y is the year 
%m is the month 
%d is the day 
%H is the hour 
%M are the minutes 
%S are the seconds 

時間戳添加到壓縮文件的名字,所以就變成:

for sourcePath in $sourcePaths 
do 
    timestamp=`date +%Y%m%d_%H%M%S` 
    zipFile=$destPath/$(basename $sourcePath).$timestamp.zip 
    find $sourcePath -type f -mtime +10 -name "*.log" | xargs zip -mT $zipFile [email protected] 
done 

使用-j拉鍊標誌只存儲文件名不目錄名。新的命令將是:

for sourcePath in $sourcePaths 
do 
    timestamp=`date +%Y%m%d_%H%M%S` 
    zipFile=$destPath/$(basename $sourcePath).$timestamp.zip 
    find $sourcePath -type f -mtime +10 -name "*.log" | xargs zip -jmT $zipFile [email protected] 
done 
+0

@fahd ::非常感謝你的答覆。現在我想在此添加一些過濾器。我想從源路徑中移動10天的文件,並且我想在移動後從源路徑中刪除這些文件。請幫助 – MAS1 2010-09-22 09:45:02

+0

@fahd ::感謝您的即時答覆。只有一個問題,我以前的條件是否也適用於此。我的意思是壓縮文件。我想只添加這兩個過濾器,保持以前的狀態,因爲它是。您的以前的答案satiesfies我以前的所有條件,想知道這個新post.And我想從源路徑移動後刪除移動的文件。 – MAS1 2010-09-22 10:11:18

+0

是的,以前的條件會繼續工作。 'mv'命令移動文件,所以是的,它們將不再處於源路徑中。 – dogbane 2010-09-22 10:26:07

1

以下將遍歷所有源路徑,在$ destPath中創建一個tar.gz文件。該.tar.gz包含一個名爲$sourcePath的文件夾,其中包含日誌文件(擴展名爲.log的文件)。
.tar.gz文件的名稱將基於$ sourcePath的基本名稱,abc/xyz將導致要創建的文件xyz.tar.gz

for sourcePath in $sourcePaths;do 
    name=`basename $sourcePath` 
    tar czf "$destPath/$name.tar.gz" $sourcePath/*.log 
done 

注意:您source_path S可不能包含空格或製表符,日誌文件沒有遞歸搜索。

相關問題