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


11

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


2
なぜfind再び使用できないのですか?
イグナシオバスケス-エイブラムス

findコマンドはディレクトリをそのまま保持できますか?
nixnotwin

回答:


23

あなたが考えるより簡単:

$ 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)

しかし、私は最初の方がよりシンプルで、あなたが望むものを明確に表現し、驚きが少なくなるので好むでしょう。


2
+1何!SFの礼儀正しく、友好的な人か。
チョンゴシ14年

1
同じ堆積物を+1。最近SFであまりにも多くの利己的な荒らしがあります。
パトシパトシ

*センチメント:P :)
MikeyB

1

一部のシステムでは、ファイル名に角括弧が含まれている場合、明示的に除外する必要があります。例えば

$ mkdir test
$ echo "abcde123456" > ./test/a[b].txt
$ echo "1" > ./test/a1.txt
$ ls -la ./test
total 16
drwxrwxr-x 2 user user 4096 Jan 10 16:38 .
drwx------ 4 user user 4096 Jan 10 16:38 ..
-rw-rw-r-- 1 user user    2 Jan 10 16:38 a1.txt
-rw-rw-r-- 1 user user   12 Jan 10 16:38 a[b].txt
$ tar -zcvpf a.tar.gz ./test
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf a3.tar.gz ./test --exclude-from <(find ./test -type f -size +3c)
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf ax.tar.gz ./test --exclude-from <(find ./test -type f -size +3c) --exclude '*\[*'
./test/
./test/a1.txt

0

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

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.