2016-11-09 4 views
0

2つのフォルダを比較して、内部のファイルが同じかどうかを確認します。同じであれば、それらのファイルを別のフォルダに移動しました。たとえば:シェルスクリプトを使用して2つのフォルダのファイルを比較します

f1      f2 
    ------    -------- 
    test1     test3 
    test2     test4 
         test1 

はここtest1.txtファイルには、両方のフォルダで提供されていますので、私は別のフォルダにそのファイルを移動する必要があります。

これはどのようにシェルスクリプトを使用して行うことができますか?

答えて

0

最初のディレクトリにファイルを反復処理します。ファイル内の各ファイルについて、それが他のディレクトリに存在するかどうかを確認します。存在する場合は、両方のファイルを別のディレクトリに移動します。

0
for F in f1/* 
do 
    test -f $F && test -f f2/${F#*/} && echo cp $F f3/ 
done 

このような状況でパラメータ拡張を知ることをお勧めします。上記のコンストラクタ${F#*/}$(basename $F)と同等ですが、反復ごとにベース名(1)を実行しないため、はるかに高速です。

多くのファイルがあり、ファイルがの標準ファイルであるかどうかを実際にテストする必要がない場合は、スクリプトを生成することでループを回避して処理を高速化することができます。次のようなものがあります:

mkfifo .f1 .f2 
(cd f1 && ls > ../.f1)& (cd f2 && ls > ../.f2)& 
comm -12 .f1 .f2 | sed 's:^.*$:cp f1/& f3/:' | sh 
rm .f1 .f2 

私は、ファイル名にスペースやその他の奇妙な文字は含まれていないと仮定しています。もしそうであれば、パラメータは引用が必要です。

関連する問題