回答:
あなたが考えるより簡単:
$ 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)
しかし、私は最初の方がよりシンプルで、あなたが望むものを明確に表現し、驚きが少なくなるので好むでしょう。
一部のシステムでは、ファイル名に角括弧が含まれている場合、明示的に除外する必要があります。例えば
$ 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
find
再び使用できないのですか?