ディレクトリ内のすべてのファイルをtarアーカイブしようとしています/var
。もちろんここではUnixソケットを除外したいと思います。
だから私は次のコマンドを試してみます。
sudo find /var \! -type s -exec tar -rf ~/test/etc.tar {} \;
ただし、重複したエラーメッセージが表示されます。
tar format cannot archive socket:
tarの代わりにコピーしようとすると、同様のエラーが発生します。
cp: ./var/run/devd.pipe is a socket (not copied).
find
ソケットタイプのファイルを除外できない理由を知っている人はいますか?たとえば、ディレクトリタイプファイルを除外できます。
答え1
ディレクトリも除外する必要があります。ディレクトリを除外しない場合は、引数として(および他のディレクトリ)をtar
取得し、/var
ソケットの有無にかかわらず、これらのディレクトリのすべての内容をアーカイブする作業に進みます。また、同じ理由で(/var
含む)/var/log/messages
多くのファイルの複数のコピーを追加します/var/log
。
find /var ! -type s ! -type d -exec tar -r -f archive.tar {} +
または、通常のファイルとシンボリックリンクのみを希望する場合:
find /var '(' -type f -o -type l ')' -exec tar -r -f archive.tar {} +
一度にできるだけ少ない呼び出しを行い、できるだけ多くの引数を使用したいので、ここで代わりに使用することにしました-exec ... {} +
。-exec ... {} ';'
tar