Bashでlsを使う

Bashでlsを使う

次のファイルがあります。

a.10 a.15 a.20 a.30 a.40 a.50

すべての人に同じことを行うには、次のことを使用できます。

for data in `ls a*| sort -n`

同じことを一つずつやりたいなら。利用可能なもの:

data=(`ls a* | awk '{print $1}'`)
numb=`ls a*|wc|awk '{print $1}'`
ii=0
for da in ${data[$ii]} ; do
 echo  ${data[$ii]}
 ii=$(($ii+1))
 done

しかし、iiが2以上のファイルに対して同じことをどのように実行できますか?つまり、lsと同じですが、すべてのファイルが2であるわけではありません。

    a.20 a.30 a.40 a.50

ベストアンサー1

ls拡張が実際にシェルによって実行されたときに出力を解析する理由はまったくありません。このコードの代わりに:

for data in `ls a*| sort -n`

以下を使用できます。

for data in a*

ソートする必要がある場合でも、以下を使用できます(ファイル名に新しい行がある場合は失敗します)。

for data in $( echo a* | sort -n )

複数の値を使用する最善の方法は、その値を配列に入れることです。
具体的には、パラメータの配列は次のとおりです。

set -- a*
printf '<%s>' "$@"; echo

そして、いくつかのタスクを1つずつ実行するコードは、次のように簡単になります。

#!/bin/bash
set -- a*
numb=$#
printf '%s ' "$@"

ファイル数に基づいて処理するには、次のようにします。

#!/bin/bash
# using bash as the [[ is more robust.

set -- a*         # set an array of all files that start by a
for    file       # walk the array one by one
do
       [[ ${file#a\.} -le 20 ]] && continue # is the file number < 20
       printf '%s\n' "$file"                # do additional processing here
done

おすすめ記事