0

タイトルが示すように、実行中のディレクトリに影響を与えることなく、ネストされたディレクトリ構造内でスクリプトを実行したいと考えています(出力は、操作対象のファイルが存在する構造内のサブフォルダーに移動します)。

例えば:

home/   (where we use the script)
home/data1/file1.txt
home/data2/file2.txt
home/data3/file3.txt

スクリプトを作成すると、出力は次のようになります。

home/

しかし、出力を次のようにしたいと思います:

home/data1/output1
home/data2/output2
home/data3/output3

これを達成するための最良の方法は何ですか?ご意見をいただければ幸いです。

一般的なケースよりも特定のケースを好む場合に備えて、以下の私のスクリプト。

スクリプトを実行するスクリプト:

#!/bin/bash
# iterate over a NUL-delimited stream of directory names
while IFS='' read -r -d '' dirname; do
  # ...then list files in each directory:
  for file in "$dirname"/*; do
    # ignore directory contents that are not files
    [[ -f $file ]] || continue
    # run analysis tool
    if [[ $file == *.dmp ]]; then
      echo $dirname;
      ./gdp $file;
      #ls $dirname;
      echo "complete";
      continue
    fi
  done
done < <(find . -type d -print0)

実行するスクリプト:

#!/bin/bash
echo $1;
awk '
    /Internet Protocol Version 4, Src:/{ip=$(NF-4)}
    /    Time to live/{ttl++}
    /    Time to live/{sttl=$NF}
    /    User-Agent/{}
    /    User-Agent/ && NF>6 {os=$(NF-6)" "$(NF-5)}
    /    User-Agent/ && NF<6 {os="\t"}
    /    User-Agent/{brow=$NF}
    /    User-Agent/{agent++}
    /    User-Agent/{stringtemp=sttl"\t"ip"\t"os"\t"brow}
    /    User-Agent/{string=(string)"\n"(stringtemp)}
    /Windows;/{windows++}
    /Linux;/{linux++}
    /Solaris;/{solaris++}
    /Epoch Time: /{count++}
    END{
        sub(/\\r.*$/, "", brow);
        print os;
        print "("count")" > "temp";
        print "TTL\tIP\t\tOS\t\tBROWSER";
        print string;
        print "\nSUMMARY\n\tttl\t=\t"ttl"\n\twindow\t=\t"windows"\n\tlinux\t=\t"linux"\n\tsolaris\t=\t"solaris >> "temp";
    }
' $1 > summary_$1;
sort -k2n summary_$1 | uniq > holder;
cat temp > useragents_$1;
cat holder >>  useragents_$1;
more useragents_$1;
4

1 に答える 1

1

最初のスクリプト変更で:

./gdp $file;

to

./gdp $file $dirname;

2 番目のスクリプトの変更で:

' $1 > summary_$1;
sort -k2n summary_$1 | uniq > holder;
cat temp > useragents_$1;
cat holder >>  useragents_$1;
more useragents_$1;

to

' $1 > $2/summary_$1;
sort -k2n $2/summary_$1 | uniq > $2/holder;
cat temp > $2/useragents_$1;
cat $2/holder >>  $2/useragents_$1;
more $2/useragents_$1;
于 2013-08-08T17:43:55.700 に答える