指定されたパスからスターを付けてすべてのサブディレクトリをループし、現在のディレクトリ内のすべてのファイルの md5 合計でリストを作成するスクリプトを bash に書き込もうとしています。
のようなものが必要ですがls -R
、開始方法がわかりません
指定されたパスからスターを付けてすべてのサブディレクトリをループし、現在のディレクトリ内のすべてのファイルの md5 合計でリストを作成するスクリプトを bash に書き込もうとしています。
のようなものが必要ですがls -R
、開始方法がわかりません
findを使用してこれを行う非常に簡単な方法があります。
find . -type f -exec md5 {} \;
このコマンドはすべてのファイルを検索し ( -type f
)、各ファイルに対してコマンド md5 を実行します ( -exec md5 {} \;
)。
tree というプログラムもありますが、シェルのビルトインのみでシミュレートできます。
#!/bin/sh
DIR=${1:-`pwd`}
SPACING=${2:-|}
cd $DIR
for x in * ; do
[ -d "$DIR/$x" ] && echo "$SPACING\`-{$x" && $0 "$DIR/$x" "$SPACING " || \
echo "$SPACING $x : MD5=" && md5sum "$DIR/$x"
done
フルパス引数が必要であることに注意してください(または現在のディレクトリには何も必要ありません)
find ほど高速ではありませんが (高速化する方法はたくさんあるため、コードを理解するのがより複雑になります)、ツリー構造のグラフィカルな表現が得られます。&& [ ! -L "$DIR/$x" ]
ディレクトリを追加するか、リストのみに追加することで、シンボリックリンクをたどらないように変更できます。|| echo $SPACING $x