2013-05-14 35 views
1

我想寫一個bash腳本,這將允許我抓取Dir1上的文件的名稱例如,並使用每個文件名作爲我的搜索字符串中的找到命令,然後在Dir2上運行find命令。然後,將搜索結果輸出到文本文件。Bash腳本比較/搜索使用文件列表作爲變量的兩個目錄

因此,例如,當運行時,它會:

Dir1中獲取文件:

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

中名

文件1的方向2存在的「文件1 - extrafile.txt」

寫結果使用「文件2」作爲搜索字符串文本文件

重複查找方向2與「文件1」的任何文件。

我該怎麼做? diff會幫助我嗎? A for循環?

+0

這是未經測試的,但在''find'/ path/to/dir1'\'中嘗試使用'FILE';找到'/ path/to/dir2'-name'* $ FILE *'>> /path/to/result.txt;完成' –

+0

你關心Dir1和Dir2的子目錄嗎?你是否想要包括子視角? –

+0

你想如何處理不同的擴展?你只關心.txt文件嗎?或者你想忽略任何擴展? –

回答

1

試試這個:

for f in /dir1/*; do 
    n=$(basename "$f") 
    ls -1 /dir2/*${n%.*}*.${n##*.} 
done > result.txt 
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 
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 
+0

您可以使用'-print0'代替。 –

+0

'-print0'將相當於'-printf'%p \ 0'',這不起作用 – antak