Pro 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.
Pravděpodobně se také budete chtít podívat na --preserve-order
.
S zsh
, místo:
pax -w dir
Použijte:
pax -dw dir dir/**/*(D)
Totéž můžete udělat s nejnovějšími verzemi bash -O globstar -O dotglob
s:
pax -dw dir/**
Nebo nejnovější verze FIGNORE='@(.|..)' ksh93 -o globstar
s:
pax -dw dir dir/**
pax
je standardní příkaz k vytvoření tar
soubory. Výstup jde do stdout. Skořápky jsou seřazeny podle názvu.
Pokud narazíte na seznam argumentů je příliš dlouhý chyba, můžete změnit na:
printf '%s\0' dir dir/**/*(D) | pax -0dw
(ne všechny pax
implementace podporují -0
ačkoli).
tar
sám to neumí, takže jej musíte vytvořit ze správně uspořádaného seznamu. V zásadě byste pak mohli použít tar
's -T
možnost, ale neexistuje způsob, jak určit, že názvy souborů v tomto seznamu by měly být ukončeny NUL. Takže pokud máte nějaké názvy souborů s novými řádky (což je povoleno), toto se prostě přeruší.
Lepší možností je použít cpio
generovat soubory, protože přijímá seznam názvů souborů ukončený NUL a může generovat soubory tar.
Pokud je vaše tar
příkaz by byl:
tar cvf /somedir/all.tar .
Pak, aby to bylo seřazeno podle názvu, musíte udělat (za předpokladu GNU find a cpio):
find . -type f -print0 | sort -z | \
cpio --create --null --format=ustar -O /somedir/all.tar
To má však nevýhodu, že podadresáře jsou umístěny mezi názvy souborů. S find
můžete dělat triky s -printf0 specifikující informace o adresáři a hloubce a řazení pomocí sort -n
ale to také ovlivňuje, jak jsou soubory s čísly seřazeny v adresáři.
Pokud výše uvedené není uspokojivé, pravděpodobně byste mohli použít malý pythonový program založený na os.walk()
generovat požadované řazení s plnou kontrolou (nejdříve hloubka, na základě rozšíření atd.), ale pokud půjdete touto cestou, můžete také vypustit cpio
a napište tar
soubor s pythonovým tarfile
modul.