2012-09-10 41 views
16

我在我的服務器中包含一些文件的文件夾。這些都是自動化的,這意味着我們每天都會自動獲取新文件,覆蓋舊文件。 所以想要備份這些數據。 如何通過在複製時用當前日期重命名文件將所有這些文件複製到另一個文件夾中。將文件從一個位置複製到另一個位置並重命名的Shell腳本將當前日期添加到每個文件

例如:我有一個名爲folder1的文件夾,其中包含4個文件。該文件夾的路徑是家庭/ webapps /目錄PROJECT1 /文件夾1

  1. aaa.csv
  2. bbb.csv
  3. ccc.csv
  4. ddd.csv

現在我想複製所有這四個文件都放到名爲folder2的不同文件夾中。 此文件夾的路徑是home/webapps/project1/folder2。 複製這些文件時,我想重命名每個文件並將當前日期添加到文件。 所以在文件夾2我的文件名應該是..

  1. aaa091012.csv
  2. bbb091012.csv
  3. ccc091012.csv
  4. ddd091012.csv

我想寫一個shell腳本爲此。請給我一些想法或與此相關的一些示例腳本。

+0

您可能希望將文件「移動」到新目錄中,而不是「複製」。否則,下次運行腳本時,即使文件沒有更改,也會複製文件。用提供的答案,使用'mv'命令而不是'cp'。如果這兩個目錄在不同的文件系統上(意思是你不能使用'mv'),那麼在複製之後添加一個'rm'命令來刪除源文件。如果您**需要使用'cp',我會添加'-p'選項來保留原始時間戳。 – BellevueBob

+0

@ran,對於linux服務器也是,下面的答案將工作? –

回答

23

bash,只要將文件名沒有空格:

cd /home/webapps/project1/folder1 
for f in *.csv 
do 
    cp -v "$f" /home/webapps/project1/folder2/"${f%.csv}"$(date +%m%d%y).csv 
done 
+1

工作很好...謝謝:) – ran

+0

嗨..我想添加這些文件列表,並通過該列表循環...我怎麼能做到這一點.... – ran

+0

@StephaneRouberol,對於Linux服務器也,這個答案將工作? –

1

你可以使用下面的腳本。你只需要改變日期選項來匹配你想要的格式。

#!/bin/bash 

for i in `ls -l /directroy` 
do 
cp $i /newDirectory/$i.`date +%m%d%Y` 
done 
+0

$ i.'date +%m%d%Y'這是否創建文件爲aaa.091012.csv格式...我不想在我的文件名中有任何'點'...該名稱應該只是命名。 csv(aaa091012.csv).. ??? – ran

+0

只是刪除。在$ i之後和日期命令之前。 – Lipongo

+0

我有一種感覺我被拒絕投票,因爲有人錯誤地讀了我的ls命令,因爲它有一個小寫的L,它是一個數字。這將在一行中輸出每個文件。 – Lipongo

2
path_src=./folder1 
path_dst=./folder2 
date=$(date +"%m%d%y") 
for file_src in $path_src/*; do 
    file_dst="$path_dst/$(basename $file_src | \ 
    sed "s/^\(.*\)\.\(.*\)/\1$date.\2/")" 
    echo mv "$file_src" "$file_dst" 
done 
1

有分裂的文件名和擴展名的正確方法:Extract filename and extension in Bash

您可以將它像這樣:

date=$(date +"%m%d%y") 
for FILE in folder1/*.csv 
do 
    bname=$(basename "$FILE") 
    extension="${bname##*.}" 
    filenamewoext="${bname%.*}" 
    newfilename="${filenamewoext}${date}.${extension} 
    cp folder1/${FILE} folder2/${newfilename} 
done 
0
cp --archive home/webapps/project1/folder1/{aaa,bbb,ccc,ddd}.csv home/webapps/project1/folder2 
rename 's/\.csv$/'$(date +%m%d%Y).csv'/' home/webapps/project1/folder2/{aaa,bbb,ccc,ddd}.csv 

說明:

  • --archive確保文件具有相同的所有權和權限複製。
  • foo{bar,baz}擴展爲foobar foobaz
  • rename是一種常用的程序來完成這種替代。

PS:don't use ls for this

相關問題