GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara tar file dengan urutan yang diurutkan?

Untuk GNU tar :

--sort=ORDER
 Specify the directory sorting order when reading directories.
 ORDER may be one of the following:

`none'
      No directory sorting is performed. This is the default.

`name'
      Sort the directory entries on name. The operating system may
      deliver directory entries in a more or less random order, and
      sorting them makes archive creation reproducible.

`inode'
      Sort the directory entries on inode number. Sorting
      directories on inode number may reduce the amount of disk
      seek operations when creating an archive for some file
      systems.

Anda mungkin juga ingin melihat --preserve-order .


Dengan zsh , bukannya:

pax -w dir

Gunakan:

pax -dw dir dir/**/*(D)

Anda dapat melakukan hal yang sama dengan bash -O globstar -O dotglob versi terbaru dengan:

pax -dw dir/**

Atau versi terbaru dari FIGNORE='@(.|..)' ksh93 -o globstar dengan:

pax -dw dir dir/**

pax adalah perintah standar untuk membuat tar file. Outputnya masuk ke stdout. Gumpalan Shell diurutkan berdasarkan nama.

Jika Anda menemukan Daftar Arg terlalu panjang kesalahan, Anda dapat mengubah ke:

printf '%s\0' dir dir/**/*(D) | pax -0dw

(tidak semua pax implementasi mendukung -0 meskipun).


tar itu sendiri tidak dapat melakukan ini, jadi Anda harus membuatnya dari daftar yang diurutkan dengan benar. Pada prinsipnya Anda kemudian dapat menggunakan tar -T pilihan, tetapi tidak ada cara untuk menentukan bahwa nama file dalam daftar itu harus dihentikan NUL. Jadi jika Anda memiliki nama file dengan baris baru di dalamnya (yang diperbolehkan) ini hanya akan rusak.

Opsi yang lebih baik adalah menggunakan cpio untuk menghasilkan file karena menerima daftar nama file yang diakhiri NUL dan dapat menghasilkan file tar.

Jika tar Anda perintahnya adalah:

tar cvf /somedir/all.tar .

Kemudian agar ini diurutkan berdasarkan nama yang harus Anda lakukan (dengan asumsi GNU find dan cpio):

find . -type f -print0 | sort -z | \
  cpio --create --null --format=ustar -O /somedir/all.tar

Ini memiliki kelemahan meskipun subdirektori ditempatkan di antara nama file. Anda dapat melakukan trik dengan find s -printf0 menentukan direktori dan informasi kedalaman dan menyortir dengan sort -n tetapi itu juga memengaruhi cara file dengan angka diurutkan dalam direktori.

Jika hal di atas tidak memuaskan, Anda mungkin dapat menggunakan program python kecil berdasarkan os.walk() untuk menghasilkan pengurutan yang Anda inginkan dengan kontrol penuh (kedalaman terlebih dahulu, berdasarkan ekstensi, dll), tetapi jika Anda mengikuti rute itu, Anda sebaiknya menjatuhkan cpio dan tuliskan tar file dengan tarfile python modul.


Linux
  1. Cara mengenkripsi file dengan gocryptfs di Linux

  2. Cara Mengekstrak File Tar ke Direktori Tertentu atau Berbeda di Linux

  3. Cara Melihat Isi File Terkompresi di Linux

  1. File Cat Dengan Direktori?

  2. Bagaimana Cara Menghapus Semua File Dengan Ekstensi Tertentu Di Folder Tertentu?

  3. Bagaimana cara mencerminkan direktori dengan wget tanpa membuat direktori induk?

  1. Cara gzip Direktori di Linux

  2. Bagaimana menemukan semua file dengan direktori induk tertentu di linux?

  3. Bagaimana cara mengecualikan file dari arsip TAR menggunakan ekspresi reguler?