1

ディレクトリ内のファイル数を 1 秒ごとにカウントするスクリプトを作成する必要があります。

for item in /d:/new_dir/*
do
if [ -f $item ]
then
     FILECOUNT=$[$FILECOUNT+1]
fi
done
     echo -e "No of files are $FILECOUNT\r\c";
FILECOUNT=0
sleep 1s
done

しかし、2 回の反復の間にどのファイルが追加または削除されたかを確認したいと考えています。上記のコードでどのような変更を加える必要があるか教えてください。

4

3 に答える 3

0

この単純なスクリプトは、内部 bash 配列を使用して機能するはずです。

a1=( * )
while :; do
   echo "Num of files at present => " ${#a1[@]}
   if [[ $a2 && ${#a1[@]} != ${#a2[@]} ]]; then
      [[ ${#a2[@]} > ${#a1[@]} ]] && echo "new files added =>" && \
                      grep -v -f <(printf "%s\n" "${a1[@]}") <(printf "%s\n" "${a2[@]}")
      [[ ${#a1[@]} > ${#a2[@]} ]] && echo "existing files deleted =>" && \
                      grep -v -f <(printf "%s\n" "${a2[@]}") <(printf "%s\n" "${a1[@]}")
      a1=( * )
   fi
   sleep 5
   a2=( * )
done
于 2013-09-19T07:29:41.667 に答える
0

これをどのくらいの期間やりたいですか?以下の簡単なコードは、60 秒間監視します。無限に行くには、forループをに変更しますwhile true; do(タイマーはインクリメントしないため、 への参照を削除しIます)。スペースに注意してください。

lsループよりもファイル数を取得する方が高速です。

NUMFILES=$(ls | wc -l)
echo "T : NUM : DIFF"
for I in {1..60}; do 
   sleep 1
   NEWNUM=$(ls | wc -l)
   echo $I : $NUMFILES : $[$NEWNUM-$NUMFILES]
   NUMFILES=$NEWNUM
done
于 2013-09-19T07:07:20.533 に答える