perintah tar - lewati symlink

13

Saya menggunakan perintah tar sebagai,

tar -cvf protTests.tar protTests/*

ke tarsemua file di dalam folder protTests,. Tapi ini termasuk tautan simbolis di dalam folder, yang bukan yang diinginkan.

Apakah ada opsi baris perintah, yang akan menghilangkan semua symlink?

Gilles 'SANGAT berhenti menjadi jahat'
sumber

Jawaban:

11

Anda bisa melakukan ini, untuk menyediakan tardaftar semua file di dalamnya protTestskecuali yang symlink:

find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
  tar --null --files-from - -cvf protTests.tar

Omong-omong, perintah Anda yang ada:

tar -cvf protTests.tar protTests/*

tidak akan mengarsipkan semua file protTests, itu hanya akan mengarsipkan yang namanya tidak dimulai .(yang tidak disembunyikan). The *Operator gumpal melompat file yang namanya dimulai dengan .dengan desain. Perintah juga memiliki masalah bahwa jika protTestsmemiliki banyak file (lebih dari ribuan), maka protTests/*dapat memperluas terlalu banyak argumen agar sesuai pada baris perintah.

Perintah yang lebih sederhana seperti ini tidak akan memiliki masalah tersebut:

tar -cvf protTests.tar protTests
Celada
sumber
1
Tar tidak memiliki pilihan --files-from, ini adalah opsi dari gtar, jadi Anda memberikan saran, lebih baik menyebutkan bahwa ini khusus gtar. Temukan tidak memiliki yang utama -not, ini adalah GNUisme non-portabel lainnya. Secara umum, itu adalah ide yang buruk untuk menggunakan panggilan pencarian terpisah. Ini mungkin memberikan masalah dengan karakter lucu dalam nama file dan itu pasti memberikan kinerja yang rendah karena keduanya menemukan dan kebutuhan tar untuk memindai sistem file. Masalah-masalah ini tidak berlaku untuk program-program seperti bintang yang menggunakan libfind dan dengan demikian memasukkan kode find.
schily
Izinkan saya menambahkan petunjuk umum lainnya: Ketika memberikan saran yang spesifik untuk varian khusus vendor dari program UNIX, adalah praktik yang baik untuk menyebutkan vendor dan spesifik vendor. Ini biasanya dapat dilakukan dengan menggunakan nama resmi perangkat lunak, misalnya gtar bukannya tar, vim bukannya vi. Perhatikan bahwa ini adalah platform informasi terkait UNIX, jadi dalam contoh umum harus diselaraskan dengan standar POSIX.
schily
Anda benar, @senangnya, ini adalah solusi khusus GNU. Jawaban Anda berdasarkan staradalah alternatif yang baik dan saya telah memutarnya karena alasan itu. Saya juga setuju dengan keberatan "karakter lucu" tetapi karena GNU tartidak memiliki -0pilihan itu adalah tradeoff. Saya tidak setuju dengan keberatan kinerja, itu benar-benar tidak ada konsekuensi dalam situasi ini.
Celada
2
@schily, baik GNU tardan bsdtarmemiliki --files-fromdan --nullyang menghilangkan masalah dengan karakter lucu (jika dikombinasikan dengan find's -print0atau -exec printf '%s\0' {} +). Tapi di sini, Anda mungkin ingin menambahkan --no-recursionopsi. Beberapa paximplementasi juga memiliki -0opsi.
Stéphane Chazelas
2
@ Syukurlah saya merasa bahwa utas komentar ini bukan tempat untuk advokasi untuk berbagai versi tar. Silakan bawa ke obrolan . Sudah terlalu lama dan membaca seperti perang agama. Kecuali OP berdentang pada saat ini saya tidak berpikir itu penting versi apa yang tardigunakan. Kami bahkan tidak tahu Unix apa yang mereka gunakan.
Celada
-2

Implementasi tar saya adalah metode terbaik

star -cv -f out.tar -find protTests ! -type l
schily
sumber
8
zsh: command not found: starKetika Anda menyebutkan utilitas yang Anda tahu> 99% dari pembaca Anda tidak akan memiliki pada sistem Anda, jelaskan di mana mendapatkannya. Dan Anda harus mengungkapkan afiliasi Anda ketika Anda menyebutkan produk Anda sendiri (apakah Anda memposting tautan atau tidak, jadi sebaiknya Anda memposting tautannya).
Gilles 'SO- stop being evil'
Sistem Linux yang khas akhir-akhir ini kehilangan banyak perangkat lunak penting setelah instalasi default dan pada saat yang sama, banyak perangkat lunak yang tidak berguna diinstal. Seorang pengguna Linux harus tahu cara menginstal perangkat lunak yang hilang dan orang-orang yang sering menggunakan tar biasanya sudah menginstal bintang.
schily
8
Sebagian besar orang yang sering menggunakan tar tidak pernah mendengar pax, apalagi bintang.
Gilles 'SO- stop being evil'
Yah orang-orang yang tidak tahu bahwa mereka menggunakan gtar di Linux ketika mereka memanggil "tar" mungkin bukan orang yang peduli. Star adalah implementasi tar gratis tertua dan banyak fitur yang terlihat dalam berbagai implementasi tar telah diambil dari bintang, jadi mengapa tidak bicara tentang yang asli?
schily