私はディレクトリを読み込み、その中にあるすべてのファイル(すべてのサブディレクトリを含む)のファイル形式を返すbashスクリプトを書くことを任命しました。 find コマンドは許可されません。これを達成するために2つのforループを試しましたが、分割エラーが発生しました。しかし、サブディレクトリなしでディレクトリを渡すと、スクリプトが機能することがわかりました。愚かな奴のコードを見て、何が間違っているのか教えてくれる人がいますか?とても感謝しています。
#!/bin/bash
func () {
for name in $1
do
if [ -f "$name" ]
then
file "$name"
elif [ -d "$name" ]
then
func "$1"
fi
done
}
directory="$1/*"
for name in $directory
do
if [ -f "$name" ]
then
file "$name"
elif [ -d "$name" ]
then
func "$1"
fi
done
ベストアンサー1
処理中の ""がディレクトリの場合は、元の引数ではなくその内容$name
で呼び出す必要があります。それ以外の場合は無限ループが発生し、セグメントが発生します。func
元のパラメータに関数を使用し、その関数を各項目に個別に適用すると、コードを大幅に削減できます。とにかく、今では身体機能で何が起こるのかを繰り返しています。
#!/bin/bash
func () {
local arg="$1"
if [[ -f "$arg" ]] ; then
file -- "$arg"
return
fi
if [[ -d "$arg" ]] ; then
for file in "$arg"/* ; do
func "$file"
done
fi
}
func "$1"