循环遍历文件内容并在不同目录中查找它

循环遍历文件内容并在不同目录中查找它

我需要将位于 dir 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"

该脚本将清单文件作为其第一个命令行参数,并将某个目录路径作为其第二个参数。

它从清单中读取行并测试以查看给定目录下是否存在与这些行对应的路径名。

您是否只想测试从文件中读取的每个名称的基本名称,然后使用

#!/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"

有关的:

相关内容