rsync
を使用する理由 できるとき:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
これは、ターゲット ディレクトリ構造がソースと同じであることを前提としています。
cp -r `ls -A | grep -v "c"` $HOME/
まあ、特定のファイル名パターンの除外がすべての UNIX っぽいファイル ユーティリティ (cp、mv、rm、tar、rsync、scp など) によって実行されなければならない場合、労力の膨大な重複が発生します。代わりに、そのようなことはグロビングの一部として、つまりシェルによって行うことができます。
バッシュ
man 1 bash
, / extglob .
例:
$ shopt -s extglob $ echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png $ echo images/!(*.jpg) images/004.bmp images/2252.png
したがって、 !()
内にパターンを配置するだけです 、そしてそれは一致を否定します。パターンは、個々のパスの列挙から始めて、任意に複雑にすることができます (Vanwaril が別の回答で示しているように):!(filename1|path2|etc3)
、星と文字クラスを持つ正規表現のようなものに。詳細については、マンページを参照してください。
zsh
man 1 zshexpn
, / ファイル名生成 .
setopt KSH_GLOB
を実行できます bash のようなパターンを使用します。または、
% setopt EXTENDED_GLOB % echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png % echo images/*~*.jpg images/004.bmp images/2252.png
だから x~y
パターン x
に一致 、ただしパターン y
は除外 .繰り返しになりますが、完全な詳細についてはマンページを参照してください。
魚
魚の甲羅には、これに対するはるかに優れた答えがあります:
ð cp (string match -v '*.excluded.names' -- srcdir/*) destdir
おまけのヒント
cp *
と入力します 、 Ctrl を押します X * そして何が起こるか見てください。
rsync
速くて簡単です:
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
--exclude
を使用できます 複数回。
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
ディレクトリ thefoldertoexclude
に注意してください --exclude
の後 オプションは sourcefolder
に相対的です 、つまり sourcefolder/thefoldertoexclude
.
-n
を追加することもできます 実際の操作を実行する前にコピーされる内容を確認するための予行演習を行い、問題がなければ -n
を削除します。 コマンドラインから。