不足しているファイルを検索するためにファイルのリストを繰り返す方法

不足しているファイルを検索するためにファイルのリストを繰り返す方法

1650のサイトの場所のリストを含むテキストファイルを開くスクリプトがあります。私はこのリストを繰り返しながら、2つの別々のファイルのリスト、つまり1)見つかったファイルのリストと2)欠落しているファイルのリストを印刷しようとしています。サイトの場所のリストは1列です。私が経験している問題は、スクリプトが入力ファイルを読み取らずに繰り返さないということです。スクリプトは、「ファイル内の各行を読み取って繰り返すのではなく」単一のファイルを探します。

#!/bin/bash
file=Sites-1.txt
do
if "$file" ;
then
  echo "$file found" >> found.tmp
else
  echo "$file has not been found" >> missing.tmp
fi
done

ファイルを見つけるための Sites-1.txt の入力例

01-033-0043-SO2-2014.dat.out
01-033-0044-SO2-2014.dat.out
01-033-1002-SO2-2014.dat.out
01-071-0020-SO2-2014.dat.out
01-071-0026-SO2-2014.dat.out

予想される出力ファイルの構成

found.tmp
01-033-0043-SO2-2014.dat.out found
01-033-0044-SO2-2014.dat.out found 
01-071-0026-SO2-2014.dat.out found
missing.tmp
01-033-1002-SO2-2014.dat.out has not been found
01-071-0020-SO2-2014.dat.out has not been found

ベストアンサー1

Sites-1.txt各行にファイル名が含まれていて、現在のディレクトリのファイル名に改行文字が含まれていない場合は、次のことができます。

comm -23 <(sort -u Sites-1.txt) <(ls -A)

報告された出力にu特殊行の有無。Sites-1.txtls -A

または以下を使用してzsh

expected=( ${(f)"$(<Sites-1.txt)"} )
  actual=( *(ND) )
 missing=( ${expected:|actual} )

print -rC1 -- $missing

おすすめ記事