rsync ファイル名のみ

rsync ファイル名のみ

それは可能でしょうかのみファイル名を rsync しますか? ストレージ ボックスがあり、ファイル名 (およびそのパス) を別のボックスに追加したいと考えています。現在、各ファイルを で作成していますtouch(ファイルは 0 バイト サイズで作成されます)。時間がかかりすぎるので、 で自動化できるかどうか疑問に思っていますrsync

そうでない場合、これを可能にする他のツールはありますか? それとも、カスタムのコードを記述する必要がありますか?

答え1

空のファイルを作成することが目的であれば、次のようにテンプレートを作成できます。

#!/bin/bash
FILES=$1 # original structure
TMPL=$2  # where to create empty files
[[ -d $FILES ]] || exit 1
[[ -d $TMPL ]] || mkdir -p $TMPL || exit 1

cd $TMPL
find "$FILES" -type d -printf "$TMPL%p\0" | sort -z |xargs -0 -L 1000 mkdir -p
find "$FILES" -type f -printf "$TMPL%p\0" | xargs -0 -L 1000 touch

これにより、元のツリーからすべてのファイルのディレクトリが作成され、TMPL の下に作成されたフォルダー内のファイルが変更されます。

空のファイルのみを含む「ミラーリングされた」フォルダーを作成した後、他のフォルダーと同様に任意のホストに rsync できます。

rsync -av -e 'ssh -p 22 -l username' \
    /template/structure remotehost:/backup/templates/

両方のホストでユーザー名が同じで、sshd がデフォルト ポートで実行されている場合、-e オプションはオプションです。from と to の両方またはいずれかに末尾のスラッシュを指定した場合に何が起こるかに注意してください。これは重要です。remotehost パラメータは、エイリアスではなく IP アドレスである場合があります。

答え2

rsyncそれ自体にはファイルを作成するオプションはないようです。ただし、手動で touch を使用する代わりに、さまざまな方法を試すことができます。

  • ディレクトリツリーをrsyncし、findそのツリーのルートとecho "" >各ファイルで実行する
  • を使用しfindてディレクトリ ツリーのリストを取得し、mkdir -pそのリストの各要素に対して を使用し (システム コールの数を最小限に抑えるために事前に逆順に並べ替えることもできます)、touch同様に作成されたファイルのリストに対して を使用します。

ただし、スペースに余裕がある場合は、権限とアクセス権が保持される最初のオプションを選択します ( に適切な引数を指定した場合rsync)。

関連情報