1

たとえば、Dir1 のファイル名を取得し、find コマンドで各ファイル名を検索文字列として使用し、Dir2 で find コマンドを実行できるようにする bash スクリプトを作成しようとしています。次に、検索結果をテキスト ファイルに出力します。

したがって、たとえば、実行すると次のようになります。

Dir1 のファイルを取得します。

  • file1.txt
  • file2.txt
  • file3.txt
  • file4.txt

名前に「file1」が含まれる Dir2 内のファイルを検索します

file1 は「file1-extrafile.txt」として Dir2 に存在します。

結果をテキストファイルに書き込む

検索文字列として「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 に答える
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 に答える