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.