टार: निश्चित आकार से बड़ी फ़ाइलों के संग्रह से बचें


11

मैं फ़ाइलों (टार के साथ) को संग्रह करना चाहता हूं जो आकार में 3 एमबी से नीचे हैं। लेकिन मैं उन निर्देशिकाओं को भी बनाए रखना चाहता हूं जिनमें वे फाइलें मौजूद हैं। (इसलिए मैं findकमांड का उपयोग नहीं कर सकता )। मैं सिर्फ उन फाइलों से बचना चाहता हूं जो आकार में 3 एमबी से ऊपर हैं। यह कैसे किया जा सकता है?


2
तो आप findफिर से उपयोग क्यों नहीं कर सकते ?
इग्नासियो वाज़केज़-अब्राम्स

क्या खोज आदेश निर्देशिकाओं को बरकरार रख सकता है?
nixnotwin

जवाबों:


23

जितना आप सोचते हैं उससे ज्यादा सरल:

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

एक अर्ध-संबंधित नोट पर (आपके कथन से संबंधित जिसे आप उपयोग नहीं कर सकते हैं) 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 क्या! एक विनम्र, एस एफ पर दोस्ताना व्यक्ति?!?
जोंगोसी

1
+1 वही तलछट। एसएफ पर बहुत सारे अहंकारी ट्रोल हाल ही में।
पाटोशी at ト

* भावनाएँ: पी :)
मिकीबी

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.