1

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

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

获取 Dir1 中的文件:

  • 文件1.txt
  • 文件2.txt
  • 文件 3.txt
  • 文件4.txt

在 Dir2 中查找名称为“file1”的所有文件

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

将结果写入文本文件

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

我怎样才能做到这一点?会diff帮助我吗?一个for循环?

4

3 回答 3

1

尝试这个:

for f in /dir1/*; do
  n=$(basename "$f")
  ls -1 /dir2/*${n%.*}*.${n##*.}
done > result.txt
于 2013-05-14T22:10:23.433 回答
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
于 2013-05-15T01:52:20.893 回答
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
于 2013-05-15T01:34:53.663 回答