Bash脚本使用文件列表作为变量来比较/搜索两个目录

时间:2013-05-14 21:52:35

标签: bash unix

我正在尝试编写一个bash脚本,允许我在Dir1上获取文件的名称,并在find命令中使用EACH文件名作为我的搜索字符串,并在Dir2上运行find命令。然后,将搜索结果输出到文本文件。

因此,例如,当它运行时,它将:

  

在Dir1中获取文件:

     
      
  • FILE1.TXT
  •   
  • FILE2.TXT
  •   
  • file3.txt
  •   
  • file4.txt
  •   
     

使用名称

中的“file1”查找Dir2中的所有文件      

file1在Dir2中作为“file1-extrafile.txt”

存在      

将结果写入文本文件

     

重复使用“file2”作为搜索字符串。

我该怎么做? diff会帮助我吗?一个for循环?

3 个答案:

答案 0 :(得分:1)

试试这个:

for f in /dir1/*; do
  n=$(basename "$f")
  ls -1 /dir2/*${n%.*}*.${n##*.}
done > result.txt

答案 1 :(得分:1)

find Dir1 -type f -printf '%f\0' | xargs -0 -n1 find Dir2 -name

给定文件:

Dir1/a/b/c
Dir1/a/d
Dir1/e

Dir2/a/b
Dir2/a/e
Dir2/d
Dir2/c
Dir2/e/f

将打印:

Dir2/c
Dir2/d
Dir2/a/e
Dir2/e

答案 2 :(得分:0)

将此文件放入文件(例如search.sh)并使用./search.sh dir1 dir2

执行
#!/bin/sh

dir1=$1
dir2=$2
[ -z "$dir1" -o -z "$dir2" ] && echo "$0 dir1 dir2" 1>&2 && exit 1

#
# Stash contents of dir2 for easy searching later
#
dir2cache=/tmp/dir2.$$
# Clean up after ourselves
trap "rm -f $dir2cache" 0 1 2 15
# Populate the cache
find $dir2 -type f > $dir2cache

#
# Iterate over patterns and search against cache
#
for f in $(find $dir1 -type f); do
    # Extract base name without extension
    n=$(basename $f .txt)
    # Search for files that begin with base name in the cache
    fgrep "/$n" $dir2cache
done