我正在尝试编写一个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
循环?
答案 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