0

2つの異なるディレクトリ内のファイルをループし、このように作成した異なるファイル名パターンのファイルをエコーするスクリプトを作成したいのですが、不適切です

#Files in one dir ABC-123-1.txt
#Files in subdir ABC-123.doc
for f in *.doc
  do
  f1=`echo $f|sed 's/.doc//g`'
  for f2 in ../*.txt
     do
     f3=`echo $f2|sed 's/..\///g'|sed 's/-1.txt//g'`
     if [ "$f1" != "$f3" ]
        then
        echo $f3
     fi
    done
  done
4

1 に答える 1

-1

スクリプトで何をしようとしているのかを正しく理解している場合は、dir1の「.doc」で終わるファイルを繰り返し処理してから、同じファイル名で「-1.txt」で終わるdir2のファイルを出力します。

これは、この1つのライナーを使用してbashで実現できます。

for i in `ls <dir1>/*.doc | sed 's/\.doc$//'`; do ls <dir2>/"$i"-1.txt; done  2> /dev/null

(dir1とdir2をディレクトリに置き換えます)

「2>/dev / null」は、2番目のディレクトリで一致しないファイルを無視し、一致するファイルのみを出力します。

お役に立てば幸いです。

于 2012-12-22T07:34:36.180 に答える