この質問は、例えば説明するのが最も適していると思います。
/home
test1.txt
test2.txt
/home/my-folder
test3.txt
test4.txt
test1.txt
、test2.txt
そしてmy-folder
その中にあるフォルダ/home
。test3.txt
そしてtext4.txt
内部/home/my-folder
。
フォルダのすべての内容をコピーしたいのですが、/home
その中にある2つのファイルを除外したいと思います(test3.txt
およびtest4.txt
)my-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
$