it-swarm-ja.com

スペースを含むファイル名を統計できません

私はシェルスクリプトとプロジェクトのスクリプトの作成に非常に慣れていません。ファイル名に「stat」を実行しているときに、スペースが含まれているサイズを確認するときに問題が発生しました。問題は、コマンドを直接記述できないことです。最初にコマンドを変数に格納してから、その変数を介して実行する必要があります。たとえば、私のスクリプトは次のとおりです。

##test.sh
###Start
OIFS=$IFS

IFS=$'\n'

filename=$1

a=stat
b=-c  
c=%s
d=${filename}

CMD="$a $b $c $d"

result=`$CMD`

echo "Size is:"$result

IFS=$OIFS
###END

IFS = $ '\ n'を設定して、スペースを含むファイル名をパラメーターとして渡します。それを実行すると、次のようになります。

[[email protected] ~]# ./test.sh dirLevel1/file\ Level1.txt
./test.sh: line 9: stat -c %s dirLevel1/file Level1.txt: No such file or directory
Size is:

IFSのため、シェルはコマンドをパーツに分割せずに単一のユニットとして扱っていると思います。IFSの設定を削除すると、次のようになります。

[[email protected] ~]# ./test.sh dirLevel1/file\ Level1.txt
stat: cannot stat `dirLevel1/file': No such file or directory
stat: cannot stat `Level1.txt': No such file or directory
Size is:

したがって、パラメータを2つの異なるファイルとして扱います。次のようなディレクトリにファイルを一覧表示する他のロジックからファイル名を取得しているため、「$ @」を使用できません。

for i in 'find ${arg} -type f'
do
calling the test.sh
done

できるだけ早く私を助けてください.. !!前もって感謝します....!!

2
Anil Bhargava

私はIgnacioに同意します。Bashスクリプトをシンプルに保つことが最善のアプローチです。それから、スペースで動作できるようにスクリプトを簡略化しました。スペースを処理できるようにするために、ファイル名を引用符で囲むことにより、スクリプトはファイル名のスペースを処理できるようになりました。

##test.sh
###Start

result=`stat -c %s "$1"`

echo "Size is:"$result

###END
0
DaveSB