Linuxのshellプログラミング基礎実験---ファイル処理例


要求に応じてshellスクリプトを作成する:(1)forループを利用して指定したソースディレクトリsrcdirの下の.cファイルを指定した目的ディレクトリdestdirの下に移動する;(2)ディレクトリdestdirの下のファイルをファイルサイズに従ってソートし、移動後の指定したディレクトリ内容を表示する;(3)指定ディレクトリ内のファイルサイズが指定サイズより小さいファイルを元のディレクトリ構造に従ってパッケージ化し、指定ファイル名.tar.gzファイルに圧縮する.
スクリプト:
#!/bin/bash
echo "input Sourcedir"
read srcdir
echo "input Destinationdir"
read desdir
echo "star moving..."
for file in $srcdir/*.c
do
    mv $file $desdir
done
echo "done."
ls -lS $desdir
echo "input Size(Bit)"
read dessize
echo "input Name for tar"
read tarname
for filename in `ls -lS $desdir|grep ^-|awk -v dessize=$dessize '{if($5$NF}}'`
do
    filelist="$filelist $desdir/$filename"
done
echo "star packing..."
tar -zvcf $desdir/$tarname.tar.gz $filelist
echo "done."

プログラムは比較的簡単です:ユーザーが指定したソースディレクトリと指定したディレクトリ;用*cマッチングcファイルは、forループでmv移動します.ls-lSは、移動後の内容をサイズ順に詳細に表示する.ユーザーはファイルサイズとパッケージ名を指定します.さらにgrepをパイプで結合し、awkで必要なファイルをフィルタします.grep^-ディレクトリの下に一致するファイルです.awkの-vはshellを参照する変数であり、$5と$NFはそれぞれ5列目と最後の列であり、ls-lの5列目はファイルサイズであり、最後の列はファイル名である.forループにより条件を満たすファイル名文字列を構築しtarコマンドにパッチしてパッケージング圧縮操作を完了します.