2013-10-30 103 views
0

您好,感謝您的高級幫助。我正在嘗試完成一個簡單的檢查,以查看文件夾是否包含任何以.log結尾的文件。如果它包含任何以.log結尾的文件,只需將其複製到另一個文件夾即可。我確實嘗試過類似於檢查日誌文件的文件夾

if [ -f /path/to/log/*.log ]; then cp -a /path/to/log /path/to/backup/folder; fi 

但是,這並沒有給我足夠清潔的工作。

非常感謝

回答

0

你並不需要先檢查一下,剛纔複製的文件:

cp /path/to/log/*.log /path/to/backup/folder 
+0

如果找不到文件,這將導致一個錯誤的CP會嘗試複製命名爲不存在的文件'/路徑/到/日誌/ *。日誌',除非'nullglob'被啓用。 – kojiro

+0

我想這可能是一個問題,如果你想做的不僅僅是複製文件,例如,測試是否有任何文件被複制。 – acfrancis

1

你可以使用一個bash數組:

shopt -s nullglob # Expand to the empty string if no files are found 
logfiles=(/path/to/log/*.log) 
cp -a "${logfiles[@]}" /path/to/backup/ 

還是一個POSIXLY_STRICT方法:

cpIfExists() { 
    if [ -f "$1" ]; then 
    cp "[email protected]" 
    fi 
} 
cpIfExists /path/to/log/*.log /path/to/backup/ 
+0

這正是我所期待的。我可以將它放在腳本的頂部,並在需要的地方使用它。我也可以更改源路徑和目標路徑,這也適用於其他文件擴展名。非常感謝你! – needtoknow

+0

如果您會這麼友善,我需要對此進行修改。如果文件存在,我想複製並重命名lofgile。新名稱將是本地服務器時間。 例如 LOCAL_TIME = 「'日期+」 %H-%M-%S 「'」 cpIfExists(){ 如果[-f 「$ 1」];然後 CP 「$ @」 網絡 } cpIfExists /path/to/log/*.log /path/to/dated-today-folder/backup/16-26-23-THEORIGINALNAME.log 太感謝很多 – needtoknow

0

附近沒有任何測試,這工作是肯定的,但它應該:

for log in `ls /path/to/log | grep .log`; do 
    cp /path/to/log/$log /path/to/backup/folder/ 
done 
+0

非常感謝您的先生。我也可以在同一個腳本的其他區域使用它。我很欣賞這個。 – needtoknow