while ループで一致しないファイル名を表示する

while ループで一致しないファイル名を表示する

files.txtいくつかのファイル名を含むというファイルがあります。ファイルを読み取り、aを実行して見つかったfindファイル名を返すコマンドがあります。その逆に行う方法が気になります。私が望むのは、見つからなかったファイル名を表示することです。

例:

$ ls
file1  file2  file3  files.txt
$ cat files.txt
file1
file2
file3
file4
$ while read x; do (find . -iname "$x"); done < files.txt
./file1
./file2
./file3

file4この例では、ファイル名は.txtにありますがフォルダにはないため、結果に表示したいと思います。

ベストアンサー1

使用grep(現在のフォルダ内のファイルの名前に改行文字が含まれていないと仮定):

$ grep -v -i -F -x -f <(printf '%s\n' *) files.txt
file4

オプション:

  • -v一致を取り消し、一致しない行を選択します。
  • -f printf '%s\n' *現在のディレクトリのファイルを一覧表示しますgrep
  • -Fパターンを固定文字列として解釈します(正規表現の代わりに)。
  • -x全行と一致
  • -i大文字と小文字を区別しない一致(あなたと同じ-iname)。

おすすめ記事