2013-10-14 119 views
1

我需要創建一個生成特殊「歸檔」的shell程序。這些存檔也將是shell腳本,以便它們可以用「sh」執行。歸檔重新生成shell腳本

比方說,我有這樣一些目錄結構:

mydir 
+- file.txt 
    +- mysubdir 
    +- foo.txt 

file.txt的包含 「Lorem存有」 和foo.txt的含有 「富巴」。

然後執行歸檔程序:

$ arch.sh MYDIR> bundle.sh

應該生成一個名爲 「bundle.sh」 這可能看起來像這樣的文件:

if [ \! -d mydir ] ; then 
mkdir mydir 
cd mydir 
if [ -f file.txt ] ; then 
touch file.txt 
echo "lorem ipsum" >> file.txt 
fi 
if [ \! -d mysubdir ] ; then 
mkdir mysubdir 
cd mysubdir 
if [ -f foo.txt ] ; then 
    touch foo.txt 
    echo "foo bar" >> foo.txt 
fi 
fi 
fi 

所以,基本上,如果你要執行這個捆綁腳本,那麼你最終會得到與生成捆綁包時完全相同的目錄結構和文件內容。現在,只需要編寫一個迭代所有文件和目錄的 程序,併爲每個文件和目錄創建合適的輸出即 。對於文本文件,您可以使用sed將它們處理爲 ,以將文本文件中的每一行轉換爲shell命令。 例如,如果該文件是這樣的:

Foo 
Bar 
Baz 
Goo 

然後,你可以生成以下shell命令:

echo "Foo" >> example.txt 
echo "Bar" >> example.txt 
echo "Baz" >> example.txt 
echo "Goo" >> example.txt 

對於二進制文件,你應該使用「UUENCODE」或者你也可以使用 「base64」,例如當你有一個二進制文件「file.bin」然後執行 以下命令輸出一個shell腳本,重新創建二進制文件:

base64 file.bin | sed 's/.*/echo\ \0 >> file.txt/g' 
echo "base64 -d file.txt > file.bin" 
echo "rm file.txt" 
這樣

所以,我可以通過電子郵件發送bundle.sh命令到朋友,然後當他在他的機器上執行bundle.sh時,他將生成與mydir完全相同的目錄結構。

我想知道如何執行遍歷遍歷目錄以及如何獲取每個文件的名稱以及如何將我生成的所有shell命令捆綁到bundle.sh。謝謝。傢伙。

+0

是它創建'.tar'文件的選項,並將其包括在你的腳本? –

+2

您是否真的需要編寫這個程序(也許是作業),還是隻需要生成這樣的腳本?你基本上描述了'shar'工具。 – chepner

+0

這是一個任務,我需要生成這個腳本,但爲了這樣做,我需要另一個腳本來獲取結構和內容信息。關於我將打包的目錄。謝謝 –

回答

1

使用makeself

$ cd /path/to/dir 
$ ls 
main.sh dir1 dir2 dir3 
$ makeself . ../bundle.run "Creating a bundle with makeself" ./main.sh 

main.sh是主要的腳本。該包將包含完整的遞歸目錄和主腳本。

要運行包:

chmod +x bundle.run 
./bundle.run 
+0

雖然不太瞭解你的代碼,多謝多謝 –

+0

你還讀過我發佈的鏈接http://megastep.org/makeself/嗎? –