得到一個小項目。我需要編寫一個自解壓存檔腳本,用於連接目錄的內容,以便可以通過命令行直接發送電子郵件。將給定目錄及其子目錄下文件的所有內容捆綁起來
我必須編寫一個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標記的內容。
請給我一些可靠的示例或提示,以便我可以開始並開始工作基於它們。非常感謝。
可能需要find命令通過目錄結構遞歸地行走。 –
好點拉霍斯。可能在這裏回答:http://stackoverflow.com/questions/10523415/bash-script-to-execute-command-on-all-files-in-directory。查找'find'命令示例 – crafter
嗨,謝謝你們。我試過「在/目錄中的文件」,但$文件實際上並沒有遍歷整個目錄及其子目錄。 for ... in ...語法是否自動執行此操作?謝謝 –