質問は例を挙げて行うのが最も良いと思います。
/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
フォルダーのすべての内容をコピーしますが、test3.txt
内の2つのファイル(test4.txt
およびmy-folder
)は除外します
cp
を使用してどうすればよいですか?
rsync
を試してみたところ、可能です。ただし、サーバーにrsync
がインストールされておらず、ソフトウェアをインストールする権限がない場合があります。
あなたはfind(1)
とcpio(1)
でそれを行うことができます:
find /home -path './my-folder/test[34].txt' -Prune -o \( -type f -print \) | \
cpio -pdamv /some/other/dir
これをcp
だけで行うことはできません。コピーするファイルをリストした短いfです。部分的なコピーの作成は、cpの機能を超えています。
Rsyncは、このジョブの明らかなツールであり、非常に広く使用されています。
POSIXツールしかない場合は、 pax を使用できます。パスを空の文字列に書き換えることでファイルを省略できます。
cd /home && pax -rw -pe -s'~^\./my-folder/test[34]\.txt$~~' . /path/to/destination
Paxが不足している最小限のLinuxサーバーしかない場合は、従来の同等のcpioまたはtarが利用可能かどうかを確認してください。 cpioの例については lcd047の回答 を参照してください。 GNU tarを使用すると、次のことができます
mkdir /path/to/destination
tar c -C /home --exclude='./my-folder/test[34].txt' | tar x -C /path/to/destination