![循环遍历文件内容并在不同目录中查找它](https://linux22.com/image/151657/%E5%BE%AA%E7%8E%AF%E9%81%8D%E5%8E%86%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E5%B9%B6%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%AE%83.png)
我需要将位于 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"
有关的: