2011-03-24 50 views
1

我試圖寫一個bash腳本,它下面的原始文件:的Bash shell腳本glob的文件在幾個目錄,添加到壓縮文件並刪除

  1. 枚舉通過文件列表中的目錄中,匹配指定模式
  2. 創建
  3. 移除(即刪除)匹配的文件從自己的源目錄

包含匹配的文件tar文件爲了簡單起見,我INTEN d使用的目錄和文件模式

這是我想出了到目前爲止的硬編碼列表:

#!/bin/bash 

filenames[0]='/home/user1/*.foo' 
filenames[1]='/some/otherpath/*.fbar' 

for f in ${filenames[@]} 
    do 
     echo "$f" 
done 

但是,我unusure如何從這個點開始進行。具體而言,我需要幫助的:

  1. 如何glob的匹配模式$ F
  2. 如何(從所有目錄即)在一個添加匹配的文件的整個列表到tar文件去
  3. 文件

關於刪除文件,我正在考慮簡單地遍歷上面第2步中獲取的整個列表,並且'rm'實際文件 - 是否有更好/更快/更優雅的方式?

PS:

我在Ubuntu LTS 10.0.4運行此

回答

0

tar(1)支持的--remove-files選項將其添加到壓縮文件後,將刪除的文件。

根據你想要用你的shell球體做什麼,你也許可以忽略在那裏做所有額外的工作。試試這個:

tar cf /dir/archive.tar --remove-files /home/user1/*.foo /some/otherpath/*.fbar 
+0

謝謝。這項工作 – oompahloompah 2011-03-26 10:17:03

0

如果你想,因爲你有很多目錄,使用循環,則可以使用-r選項追加到tar文件。將檔案添加到檔案後,您也可以使用--remove-files刪除檔案。

filenames[0]='/home/user1/*.foo' 
filenames[1]='/some/otherpath/*.fbar' 

for f in "${filenames[@]}" 
do 
    tar -rvf --remove-files foo.tar $f 
done 

如果沒有--remove-files選項,使用rm $ftar命令後。

+0

我猜如果檔案不存在,檔案會被創建?我猜是這樣,因爲我(明顯?),不能在循環中使用c選項 - 因爲該文件將在每次迭代時被覆蓋... – oompahloompah 2011-03-24 10:54:29

+0

@oompahloompah是的,它會創建,如果它不存在。 – dogbane 2011-03-24 10:55:41

相關問題