ファイルの内容を繰り返して、別のディレクトリで検索します。

ファイルの内容を繰り返して、別のディレクトリで検索します。

Aディレクトリ内のファイルの内容を他のディレクトリにある実際のファイルと比較する必要があります。 ex-ディレクトリAにはtest.txtファイルがあります。 test.txtに記載されているがディレクトリBにはないエントリを強調表示する必要があります。同様のことをしていますが、うまくいきません。 test.txtファイルで最後の単語のみを検索します。

#!/bin/sh
IFS=$'\n' dirA=$1 dirB=$2 
for x in $(cat < "$1"); do base_name="${x##/}" 
set -- "$dirB"/"$base_name"* 
  if [ -e "$1" ]; then 
    for y; do 
   echo "$base_name found in B as ${y##*/}" done 
  else 
     echo "$x not found in B" fi done.

答え1

diffを使用すると問題を解決できます。

diff -crs Dir1 Dir2

ファイルが存在するか、同じか異なるかが表示されます。

grepを含むファイル名は、あなたが探している名前かもしれません。

答え2

#!/bin/sh

manifest=$1
topdir=$2

while IFS= read -r name; do
    pathname="$topdir/$name"

    if [ -e "$pathname" ]; then
        printf 'Found: %s\n' "$pathname" >&2
    else
        printf 'Not found: %s\n' "$pathname" >&2
    fi
done <"$manifest"

スクリプトはマニフェストファイルを最初のコマンドライン引数として使用し、ディレクトリパスを2番目の引数として使用します。

マニフェストから行を読み取り、その行に対応するパス名が指定されたディレクトリにあることを確認するためにテストします。

ファイルから読み取った各名前のデフォルト名をテストし、次のものを使用しますか?

#!/bin/sh

manifest=$1
topdir=$2

while IFS= read -r name; do
    pathname="$topdir/$( basename "$name" )"

    if [ -e "$pathname" ]; then
        printf 'Found: %s\n' "$pathname" >&2
    else
        printf 'Not found: %s\n' "$pathname" >&2
    fi
done <"$manifest"

関連:

関連情報