同期

同期

この質問は、例えば説明するのが最も適していると思います。

/home
   test1.txt
   test2.txt
   /home/my-folder
      test3.txt
      test4.txt
  1. test1.txttest2.txtそしてmy-folderその中にあるフォルダ/home
  2. test3.txtそしてtext4.txt内部/home/my-folder

フォルダのすべての内容をコピーしたいのですが、/homeその中にある2つのファイルを除外したいと思います(test3.txtおよびtest4.txtmy-folder

これを行うにはどうすればよいですかcp

rsync試してみましたが、時にはrsyncサーバーにインストールされておらず、ソフトウェアをインストールする権限がないため、これが可能であることがわかります。

答え1

find(1)以下を使用してこれを実行できますcpio(1)

find /home -path './my-folder/test[34].txt' -prune -o \( -type f -print \) | \
    cpio -pdamv /some/other/dir

答え2

cpコピーしたいファイルを一覧表示しないと、単独でこれを行うことはできません。部分コピーの作成はcpの機能を超えています。

Rsyncは仕事のための確実なツールであり、非常に広く使用されています。

POSIXツールのみがある場合は、次のものを使用できます。公園。ファイルパスを空の文字列に書き換えることで、ファイルを省略できます。

cd /home && pax -rw -pe -s'~^\./my-folder/test[34]\.txt$~~' . /path/to/destination

最小限のLinuxサーバーのみが欠落している場合は、既存paxのサーバーが利用可能でcpioあることを確認してくださいtar。バラよりlcd047の答えたとえばcpio。 GNUを使用すると、tar次のことができます。

mkdir /path/to/destination
tar -cf - -C /home --exclude='./my-folder/test[34].txt' . |
  tar -xf - -C /path/to/destination

答え3

同期

私はこのようなものが必要で、フォーラムで調査しました。 Gillesが述べたように、私が見つけた最良の方法はRSYNCを使用することです。私が好きな2つ:

  • .gitignoreなどの外部ファイルを入力として使用して、コピーしたくないファイルやフォルダを除外できます。
  • これは、以下の例4で説明するように(既存のファイルやフォルダをコピーせずに)同じソースディレクトリの同じバックアップ(コピー)を繰り返す必要がある場合に効率的です。

例 1: 特定のファイルを除外:

rsync -a --exclude 'file.txt' originalDirectory/ backupDirectory/

例2:特定のフォルダ(例:dirNameというフォルダ)を除く:

rsync -a --exclude 'dirName' originalDirectory/ backupDirectory/

例 3: 複数のファイルとフォルダを除外:

rsync -a --exclude={'file1.txt', 'file2.json','dir1/*','dir2'} originalDirectory/ backupDirectory/

例4:複数のファイルとフォルダを除外:

rsync -a --exclude-from='exclude.txt' originalDirectory/ backupDirectory/

除外.txt次のコンテンツが含まれています。

file1.txt
file2.json
file3.pdf
dir1
dir2
*.png

答え4

どうですか?

cp !(my-folder) /foo

例:

$ find . -type f
./my-folder/test4.txt
./my-folder/test3.txt
./test2.txt
./test1.txt
$ echo cp !(my-folder) /foo
cp test1.txt test2.txt /foo
$

関連情報