LaTeXからコンパイルされたPDFのみを格納するディレクトリを作成しようとしています。各プロジェクトを別々のフォルダーに保存し、すべてを LaTeX
という大きなフォルダーに格納するのが好きです。 。だから私は走ってみました:
rsync -avn *.pdf ~/LaTeX/ ~/Output/
〜/ LaTeX /
にあるすべてのPDFが見つかります それらを出力フォルダに転送します。これは機能しません。 「*。pdf
」に一致するものが見つからなかったことがわかります 「。このフィルターを省略した場合、コマンドはLaTeXの下のすべてのプロジェクトフォルダー内のすべてのファイルを一覧表示します。したがって、*。pdfフィルターに問題があります。 〜/
を置き換えてみました ホームディレクトリへのフルパスがありますが、効果はありませんでした。
私はzshを使用しています。同じことをbashで、さらにはでやってみました すべてのサブディレクトリ内のすべてのファイルを一覧表示するフィルタ…ここで何が起こっているのですか?
rsyncがPDFのみのフィルターを理解しないのはなぜですか?
わかった。だから更新:いいえ、私は試していません
rsync -avn --include="*/" --include="*.pdf" LaTeX/ Output/
そして、これは私にファイルリスト全体を与えます。すべてが最初のパターンに一致するためだと思います…
承認された回答:
TL、DR:
rsync -am --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/
Rsyncはソースを宛先にコピーします。 *。pdf
を渡した場合 ソースとして、シェルはこれを .pdf
を持つファイルのリストに展開します 現在のディレクトリの拡張子。ソースとしてディレクトリを渡さなかったため、再帰的なトラバーサルは発生しません。
したがって、 rsync -a〜/ LaTeX /〜/ Output /
を実行する必要があります 、ただし、rsyncに .pdf
をコピーするように指示するフィルターがあります ファイルのみ。マニュアルを読むと、Rsyncのフィルタールールは気が遠くなるように思えるかもしれませんが、いくつかの簡単なルールで多くの例を作成できます。
-
包含と除外:
- 名前または場所でファイルを除外するのは簡単です:
-exclude =*〜
、-exclude =/ some / relative / location
(ソース引数に対して、たとえば、これは〜/ LaTeX / some / relative / location
を除外します 。 - 少数のファイルまたは場所のみを照合する場合は、それらを含め、それらにつながるすべてのディレクトリを含めます (たとえば、
-include =* /
を使用します )、-exclude ='*'
で残りを除外します 。これは次の理由によるものです: - ディレクトリを除外すると、その下のすべてが除外されます。除外されたファイルはまったく考慮されません。
- ディレクトリを含める場合、その内容は自動的に含まれません。最近のバージョンでは、
-include ='directory / ***'
- ファイルごとに、最初の一致ルールが適用されます(一致しなかったものはすべて含まれます)。
- 名前または場所でファイルを除外するのは簡単です:
-
パターン:
- パターンに
/
が含まれていない場合 、ファイル名sansディレクトリに適用されます。 - パターンが
/
で終わる場合 、ディレクトリにのみ適用されます。 - パターンが
/
で始まる場合 、引数として渡されたディレクトリからrsync
へのパス全体に適用されます 。 -
*
単一のディレクトリコンポーネントの任意のサブストリング(つまり、/
と一致することはありません );**コード> 任意のパスサブストリングに一致します。
- パターンに
-
ソース引数が
/
で終わる場合 、その内容がコピーされます(rsync -r a / b
b / foo
を作成します すべてのa/ foo
)。それ以外の場合は、ディレクトリ自体がコピーされます(rsync -r a b
b / a
を作成します 。
したがって、ここに*。pdf
を含める必要があります 、それらを含むディレクトリを含め、他のすべてを除外します。
rsync -a --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/
これにより、一致するファイルが含まれていないディレクトリや、ファイルを含むサブディレクトリも含めて、すべてのディレクトリがコピーされることに注意してください。これは、-prune-empty-dirs
で回避できます。 オプション(ディレクトリを明示的に照合してもディレクトリをコピーできないため、これは普遍的なソリューションではありませんが、これはまれな要件です)。
rsync -am --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/