2013-10-12 19 views
1

得到一個小項目。我需要編寫一個自解壓存檔腳本,用於連接目錄的內容,以便可以通過命令行直接發送電子郵件。將給定目錄及其子目錄下文件的所有內容捆綁起來

我必須編寫一個shell腳本,它將捆綁文件和/或目錄列表並將其內容輸出到標準輸出。如果有一個目錄,那麼它將遞歸遍歷每個子目錄。如果文件不是ASCII(如果是二進制文件),只需在其上執行uuencode即可。

推薦的方法做,這是通過用「X」標記的文件的各行的開頭:

X  contents 
X  contents 
X  contents 

這樣,sed的可用於提取文件的內容。

輸出應該是這樣的:

>ls 
ping README.txt testsubdir 
>cd testsubdir/ 
>ls 
recursive_test.txt 
> ./arch.sh ../testdir/ > bundle 
head bundle 
. 
. 

# This SHAR archive contains the following files 
# testdir 

if test -f testdir 
then 
echo "That would clobber testdir!" 
> mkdir archtest 
> cd archtest 
> mv ../bundle . 
>ls 
bundle 
> sh bundle 
X - ping 
-rw-rw-r-- 1 erik joe 54332 Oct 5 10:19 ping 
X - README.txt 
.............(same pattern)............. README.txt 
X - recursive_test.txt 
........................................ recursive_test.txt 
> ls 
bundle testdir 

(工作目錄是TESTDIR)

我們首先要檢查它是否是一個文件或目錄,如果它是一個目錄,走了。如果它是一個文件,如果它是一個二進制文件,我們必須對它執行uuencode。然後使用sed來提取內容。

問題是我不完全明白我需要在每個步驟和順序上做的確切事情。我知道如何檢查文件類型以及如何檢查文件是否是二進制文件,但不知道如何遞歸地在每個文件上執行該文件,然後遍歷子目錄樹以對所有文件執行測試。我不知道如何添加「X」以及如何使用命令sed來獲取由X標記的內容。

請給我一些可靠的示例或提示,以便我可以開始並開始工作基於它們。非常感謝。

+0

可能需要find命令通過目錄結構遞歸地行走。 –

+0

好點拉霍斯。可能在這裏回答:http://stackoverflow.com/questions/10523415/bash-script-to-execute-command-on-all-files-in-directory。查找'find'命令示例 – crafter

+0

嗨,謝謝你們。我試過「在/目錄中的文件」,但$文件實際上並沒有遍歷整個目錄及其子目錄。 for ... in ...語法是否自動執行此操作?謝謝 –

回答

2

如果shar對您而言不夠,您可以使用tar歸檔製作自己的解決方案。

首先你會像一些自解壓腳本:

#!/usr/bin/bash 

sed '0,/^_ARCHIVE/d' "$0" | tar xvz 

exit 0 

_ARCHIVE 

而且比你可以通過簡單的添加內容到它:

tar cz your_directory >> your_sfx.sh 

您可以添加到您的自解壓你什麼都想要,總和檢查,附加信息,開始安裝腳本。它是由你決定。您還可以插入任何其他過濾器來修改編碼。例如base64在自解壓腳本,您將使用

#!/usr/bin/bash 

sed '0,/^_ARCHIVE/d' "$0" | base64 -d | tar xvz 

exit 0 

_ARCHIVE 

,並創建命令

tar cz your_directory | base64 >> your_sfx.sh 
+0

嗨Hynek,是否標記內容?你能解釋一下關於sed和tar的更多信息嗎?不太瞭解代碼。對不起,我剛剛認識shell腳本。非常感謝您的時間。 –

+0

我的代碼中的'sed'作爲過濾器來跳過自解壓腳本內容。 'tar'將捆綁並提取存檔中的目錄內容。說實話,我不明白你問題的標記部分。如果你想*寫一個自解壓存檔腳本,可以用來連接目錄的內容,以便他們可以直接通過電子郵件發送*,上面的答案中有解決方案。只需將所有需要的內容複製到一個目錄中,然後用'tar'打包並追加到腳本。 –

+0

嗨Hynek,非常感謝。但我不認爲這是我應該做的。我想這是因爲我的問題不是很清楚。我重新在這裏發佈任務:http://stackoverflow.com/questions/19368940/archive-regenerating-shell-script請看看,如果你有時間。謝謝 –

相關問題