2010-07-27 90 views
12

我的bash fu不是它應該的。gzipping一組目錄並創建一個tar壓縮文件

我想創建一個小批處理腳本,它將複製一個目錄列表到一個新的zip文件中。

有(至少)兩種方式我能想到的證明文件的列表:

  1. 從文件中讀取(說的config.txt)。該文件將直接包含的目錄列表來拉上或

  2. 硬代碼列表進入bash腳本

第一種選擇似乎更簡單(雖然不太優雅)。

我現在面臨的兩個問題是,我不知道如何做到以下幾點:

  • 提供的目錄列表的shell腳本
  • 疊代的目錄列表

有人可能會在幾行建議,我怎麼能做到這一點?

順便說一句,我在Ubuntu上運行10.0.4

回答

24

你可以在命令行上創建一個gzip壓縮的tar如下:

tar czvf mytar.tar.gz dir1 dir2 .. dirN 

如果你想要做的是,在一個bash腳本,並傳遞目錄作爲腳本的參數,那些參數將以[email protected]結尾。所以,那麼你必須:

tar czvf mytar.tar.gz "[email protected]" 

如果是在腳本中(可以說myscript.sh),你應該叫它爲:

./myscript.sh dir1 dir2 .. dirN 

如果你想從列表中讀取(您選擇1)你能做到這一點,像這樣(如果有目錄名中的空格這不起作用):

tar czvf mytar.tar.gz $(<config.txt) 
+0

@peter:謝謝您的回答 - 我想要的是幾乎得到我。但我很懶,不想每次都在命令行輸入相同的文件列表(這也是容易出錯的) - 這就是爲什麼我要'硬編碼'目錄列表 - 無論是在腳本本身還是單獨的保存在外部文件中。你能解釋一下我如何修改上面的命令來做到這一點? – morpheous 2010-07-27 06:26:17

+0

甜美!這看起來像我想做的事情。我必須說這個語法看起來很可怕。我最好讓自己成爲一個bash編程書 - 快! :) – morpheous 2010-07-27 06:29:27

+0

@morpheus:除了購買一本書之外,我會推薦閱讀'man bash'(在這個例子中是* Command Substitution *部分)。另請注意,帶有config.txt的解決方案對名稱中帶有空格的目錄不起作用。 – 2010-07-27 06:40:42

0

創建兩個文件: 文件列表 - 將所有必需的目錄(一個上單線)

,並創建一個簡單的bash腳本:

#!/bin/bash 


for DIR in `cat filelist` 
do 
    if [ -d $DIR ] 
    then 
     echo $DIR 
    fi 
done 
0

可以導出一個變量由於目錄=「DIR1 DIR2 DIR3 ......」 而在腳本,你需要使用像變 tar czvf $ DIRECTORIES

0

當您將文件/目錄名寫入文件時,只需使用空字節作爲分隔符。這樣你就不用擔心文件名中的空格,換行符等了!

printf "%s\000" */ > listOfDirs.txt # alternative: find ... -print0 

while IFS="" read -r -d '' dir; do command ls -1abd "$dir"; done < listOfDirs.txt 

tar --null -czvf mytar.tar.gz --files-from listOfDirs.txt 
0

如果您正在尋找壓縮目錄,以下命令可以提供幫助。

pbzip2 compresses directories using parallel implementation

tar cf <outputfile_name> --use-compress-prog=pbzip2 <directory_name> 
相關問題