bashシェルスクリプトを使用して他のコンピュータ上のすべてのファイルを見つける方法は?

bashシェルスクリプトを使用して他のコンピュータ上のすべてのファイルを見つける方法は?

machineBどのファイルが含まれているのか、どのファイルが含まれているのかを調べようとしますmachineC

どのファイルが存在し、どのファイルが存在するかをmachineA確認するには、シェルスクリプトを実行する必要があります。machineBmachineC

約300個のファイルmachineBmachineC

今、どのファイルがどのコンピュータにあるかを確認したいと思います(machineB or machineC)

以下は私が実行しているシェルスクリプトmachineAです。ここPRIMARY_PARTITIONにはいくつかのファイル番号とSECONDARY_PARTITIONいくつかのファイル番号があります。このファイルはこのディレクトリにあります。

/data/snapshot/20140317

またはmachineB..machineCファイルパスは次のとおりです -

t1_1980_0_200003_5.data
t1_1980_3_200003_5.data
t1_1980_5_200003_5.data
t1_1980_7_200003_5.data
t1_1980_9_200003_5.data

ここのファイル番号は0、3、5、7、9です。filenameファイル番号を除いて、名前は常に同じです。

#!/bin/bash

readonly FILERS_LOCATION=(machineB machineC)
readonly MEMORY_MAPPED_LOCATION=/data/snapshot
PRIMARY_PARTITION=(0 3 5 7 9)
SECONDARY_PARTITION=(1 2 4 6 8)

dir1=20140317
dir2=20140317

echo $dir1
echo $dir2

if [ "$dir1" = "$dir2" ]
then
    for el in "${PRIMARY_PARTITION[@]}"
    do
        # do something here may be?
    done
    for sl in "${SECONDARY_PARTITION[@]}"
    do
        # do something here may be?
    done
fi

今私の質問machineBmachineC。でどのファイルがあり、どのファイルがあるかを意味します(0 3 5 7 9)(1 2 4 6 8)machineBmachineC

たとえば、上記の非常に小さなファイルセットを表示しました。一般的にファイルが多すぎるので、machineB、machineCにログインしてファイルを見つけるのはかなり難しいと思います。

ベストアンサー1

私はすぐに2つのアプローチを考えることができます。 1つ目は&の組み合わせを使用すること、rsync2番目はssh&を使用することですdiff

メモ:どちらの方法も、システムAのすべてのファイルを含むディレクトリをシステムBとCのファイルのサブセットと比較して、どのシステム(BまたはC)が問題のファイルの開始者であるかを示します。

サンプルデータ

machineAに次のファイル設定があるとしましょう。

$ ls
t1_1980_10_200003_5.data  t1_1980_4_200003_5.data  t1_1980_8_200003_5.data
t1_1980_1_200003_5.data   t1_1980_5_200003_5.data  t1_1980_9_200003_5.data
t1_1980_2_200003_5.data   t1_1980_6_200003_5.data
t1_1980_3_200003_5.data   t1_1980_7_200003_5.data

方法 #1 - 再同期

それでは、このディレクトリのどのファイルがmachineBのものかを見てみましょう。

$ rsync --dry-run -avz machineB:~/20140317/ .
receiving incremental file list
./
t1_1980_1_200003_5.data
t1_1980_2_200003_5.data
t1_1980_3_200003_5.data
t1_1980_4_200003_5.data
t1_1980_5_200003_5.data

sent 29 bytes  received 165 bytes  129.33 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

そして機械C:

$ rsync --dry-run -avz machineC:~/20140317/ .
receiving incremental file list
./
t1_1980_10_200003_5.data
t1_1980_6_200003_5.data
t1_1980_7_200003_5.data
t1_1980_8_200003_5.data
t1_1980_9_200003_5.data

sent 29 bytes  received 166 bytes  390.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

方法 #2 - ssh + diff

あるいは、いくつかの準基本的な方法を使用して同様のタスクを実行するsshことができる。diff

$ cd /dir/with/machBC
$ diff -B <(ssh user@machineB "ls -R ~/20140317/") <(ls -R .)
> .:
> t1_1980_10_200003_5.data
> t1_1980_6_200003_5.data
> t1_1980_7_200003_5.data
> t1_1980_8_200003_5.data
> t1_1980_9_200003_5.data

おすすめ記事