
100 MBを超えるファイルを除いて、既知のファイル拡張子パターンと一致する100 MBを超えるファイルを含むデータを転送するにはどうすればよいですか?
rsyncオプションについて読みましたが、rsyncを使用するとこれを達成できないようです--max-size=
。 orと一緒に使っても十分に柔軟ではないからです。--include
--exclude
答え1
2つのステップに進みます(単純化のためにこれらのステップを組み合わせることもできます)。
まず「小さい」ファイルを転送します。
find /source/path -type f -size -100M -print0 |
rsync -av -0 --files-from=- / user@server:/destination/
次に、ファイル名が一致する「ラージ」ファイルを転送しますpattern
。
find /source/path -type f -size +99M -name 'pattern' -print0 |
rsync -av -0 --files-from=- / user@server:/destination/
しかし、これはテストされていません。
-print0
GNU(およびその他)で見つかった名前は区切り文字find
で印刷され、この標準入力ストリームを特定の方法で解釈します。nul
-0
rsync
--files-from-
読み取ったファイルパスは--files-from
指定されたソースに基づいている必要があるため、/
inをソースとして使用しています(inは絶対パスであるとrsync
仮定します)。/source/path
find
組み合わせの変更(テストされていません):
find /source/path -type f \
\( -size -100M -o -name 'pattern' \) -print0 |
rsync -av -0 --files-from=- / user@server:/destination/
pattern
「ラージ」ファイルには複数の文字列が許可されています。
find /source/path -type f \
\( -size -100M -o -name 'pattern1' -o -name 'pattern2' -o -name 'pattern3' \) -print0 |
rsync -av -0 --files-from=- / user@server:/destination/
各ファイル拡張子は、使用するすべてのファイル拡張子pattern
と似ています。*.mp4
に示すように、これらの内容を引用する必要があります-name '*.mp4'
。