web-dev-qa-db-ja.com

Tar:特定のサイズより大きいファイルのアーカイブを回避します

サイズが3 MB未満のファイル(tar付き)をアーカイブしたい。しかし、それらのファイルが存在するディレクトリも保持したいと思います。 (したがって、findコマンドは使用できません)。サイズが3MBを超えるファイルは避けたいだけです。これはどのように行うことができますか?

11
nixnotwin

あなたが思っているよりも簡単です:

$ tar cf small-archive.tar /big/tree --exclude-from <(find /big/tree -size +3M)

(findを使用できないというステートメントに関連する)半関連のメモで、パスから3MiBより大きいファイルを除いたすべてのファイル(ディレクトリを含む)のリストを取得するには、以下を使用します。

$ find . -size -3M -o -type d

その後、次のことができます。

$ tar cf small-archive.tar --no-recursion --files-from <(find /big/tree -size -3M -o -type d)

しかし、私は最初のものを好みます。それはより単純で、あなたが望むものを明確に表現し、驚きが少ないからです。

23
MikeyB

SSH経由でサーバー上でこれを実行しようとすると、 this のために機能しません。これを回避するには、パイプとxargsを使用できます。

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar
0
Howl