GNU/Linux >> Linux の 問題 >  >> Linux

「cp」コマンドを使用して特定のディレクトリを除外する方法は?

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 を削除します。 コマンドラインから。


Linux
  1. Linux Rsync(リモート同期)コマンドの使用方法

  2. Linuxでのコピーから特定のディレクトリを除外する方法

  3. Rsyncコマンドをスケジュールする方法は?

  1. [Linux]:「tar」シェルコマンドを使用するときにディレクトリを除外する方法

  2. find でディレクトリを除外する方法。指図

  3. ls コマンドからディレクトリを除外するにはどうすればよいですか

  1. Linux rsyncコマンド:使用方法

  2. LinuxでRsyncコマンドを使用するにはどうすればよいですか?

  3. 「mv」コマンドを使用して、特定のディレクトリ以外のファイルを移動する方法は?