tar アーカイブ作成時にソケットタイプファイルを除外する問題を探す

tar アーカイブ作成時にソケットタイプファイルを除外する問題を探す

ディレクトリ内のすべてのファイルを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

関連情報