コマンドラインを介してリモートディレクトリツリー全体とファイル構造を空のファイルに複製する方法は?

コマンドラインを介してリモートディレクトリツリー全体とファイル構造を空のファイルに複製する方法は?

リモート本番サーバーには、15 TBを超えるデータを含むディレクトリがあります。さらに、Linux 権限に加えて、ACL は、部門、ユーザー、デーモンがアクセスを微調整できるように広く使用されています。

CI / CDパイプラインと自動化されたテストでは、これらの権限の変更がシステムにどのような影響を与えるかをテストする必要がありますが、その前にテスト環境で本番コンテンツを複製する必要があります。

明らかに15TBのデータを複製することはできず、データにはあまり興味がなく、メタデータ(ファイル名、権限、タイムスタンプ - デフォルトでls -lah返されるすべての情報)にのみ興味があります。

私の使い方に応じて、私が何をしたいのかを簡単に知ることができますrsync

rsync -aAr --include='*/' --exclude='*' [email protected]:/my/directory/ /test/directory/

カタログの観点から見ると、これが私にとって必要なものです。rsync内容はありませんが、ファイル名と属性はそのままファイルのコピーを許可するオプションがある場合、問題は解決されます。 (できる?)

これで、ディレクトリで上記のrsyncコマンドを実行した後に実行する作業は次のとおりです。

ssh [email protected] 'find /my/directory -type f -exec ls -lah {} \;' > my.production.directory.files.txt

これにより、コンテンツに次のデータ行を含むローカルファイルが提供されます。

-rwxrwxrwx  1 owner  group    15K Oct 13 10:07 /my/directory/jobs.txt

これには9つのフィールドがあり、これをawkとbashに渡します。

cat my.production.directory.files.txt | awk '{print "touch " $9 " && chown "$3":"$4" "$9}' | bash

より良い方法があるべきだと思います。適用する他のコマンドと元のタイムスタンプでファイルをフィルタリングするchmod前に、これを行うより効率的な方法はありますか? like は like とcp一緒にあり、 --reference とも関連があります。ただし、リモートファイルシステムは除外されます。--attributes-onlytouchchown

応答はコマンドラインから直接実行する必要があります。どのスクリプトもアップロードまたは依存できません。また、getfacl -Rとsetfaclが権限を復元しますが、タイムスタンプと秘密の関連ファイルデータ(私が知っている)は復元しません。

ベストアンサー1

ここにクレイジーなアイデアがあります。sshfs

  1. 次のコマンドを使用してリモートディレクトリをローカルにマウントしますsshfs

    sshfs remoteuser@remotehost:/my/directory /mountpoint
    
  2. --attributes-onlyオプションを使用してcpファイル構造を再作成します。

    cp -a --attributes-only /mountpoint /test/directory
    
  3. sshfs ファイルシステムをアンマウントします。

    fusermount -u /mountpoint
    

これを行うには、リモートホストに追加のソフトウェアをインストールする必要はありません。

おすすめ記事