特別な「アーカイブ」を生成するシェル プログラムを作成する必要があります。これらのアーカイブもシェル スクリプトになるため、「sh」で実行できます。
次のようなディレクトリ構造があるとします。
mydir
+- file.txt
+- mysubdir
+- foo.txt
file.txt には「lorem ipsum」が含まれ、foo.txt には「foo bar」が含まれます。
次に、アーカイブ プログラムを実行します。
$ 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 を使用して処理し、テキスト ファイルのすべての行をシェル コマンドに変換できます。たとえば、ファイルが次のようになっているとします。
Foo
Bar
Baz
Goo
次に、次のシェル コマンドを生成できます。
echo "Foo" >> example.txt
echo "Bar" >> example.txt
echo "Baz" >> example.txt
echo "Goo" >> example.txt
バイナリ ファイルの場合は、「uuencode」を使用するか、「base64」を使用することもできます。たとえば、バイナリ ファイル「file.bin」がある場合、次のコマンドを実行すると、バイナリ ファイルを再作成するシェル スクリプトが出力されます。
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 とまったく同じディレクトリ構造が生成されます。
ディレクトリをトラバースするための再帰を行う方法、各ファイルの名前を取得する方法、および生成したすべてのシェル コマンドを bundle.sh にバンドルする方法を知りたいです。ありがとう。彼ら。