rsync --include が 0 個または 1 個の文字と一致できますか?

rsync --include が 0 個または 1 個の文字と一致できますか?

できる

rsync -a --include="*.[Jj][Pp][Gg]" --include="*.[Jj][Pp][Ee][Gg]" --include="*.[Jj][Ff][Ii][Ff]" --exclude="*" tmp/a/* tmp/b/

次のように単純化されました。

rsync -a --include="*.[Jj][PpFf][EIi]?[GgFf]" --exclude="*" tmp/a/* tmp/b/

.jpg .JFIF .jpegを次のように一致させます。

ls tmp/a/*.{J,j}{P,p,F,f}{I,i,E,e,}{G,g,F,f} 2>/dev/null


動作するサンプルテストを作成しましたが、foo.jp.pngと一致するリスクなしに埋め込み画像を--includeにマージしたい --include="*.[Jj][Pp]*[Gg]"(複製したくありません)

mkdir -p tmp/a; touch tmp/a/foo.jpeg; touch tmp/a/bar.jpg; rm tmp/b/*; rsync -a --include="*.[Jj][Pp][Gg]" --include="*.[Jj][Pp][Ee][Gg]" --include="*.[Jj][Ff][Ii][Ff]" --exclude="*" tmp/a/* tmp/b/ ; ls -la tmp/b

ベストアンサー1

他のツールを使用してファイルのリストを見つけて、rsyncにパイプする方が良いでしょう。たとえば、

find /tmp/a -iregex '.*\(jpe?g\|jfif\)' | 
rsync -nav --files-from=- / /tmp/b

大文字と小文字を無視することを意味します-iregex。正規表現パターンは^始まりと終わりに$暗黙の意味を持ちます。デフォルトの正規表現タイプは次のとおりです。Emacsだからバックスラッシュが必要です。

-n(何もコピーしないためにrsyncに残しました)。--files-from暗黙的に、-Rこれはフルパス(たとえば)をtmp/a/t.jpgターゲットにコピーすることを意味するため、クエリでは絶対パスを使用し、rsyncとして使用します。~から目次( /)。これは、ルックアップとrsyncに提供する必要がある起動ディレクトリを理解するまでテストを簡素化するためです。

たとえば、tmp/aプレフィックスを削除するには、次のようにします(cd /tmp/a; find . ... ) | rsync ... /tmp/a /tmp/b。 find が出力されt.jpg、 rsync が でファイルを見つけて/tmp/aからファイルを生成します。t.jpg/tmp/b

おすすめ記事