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"
関連: