GNU/Linux >> Znalost Linux >  >> Linux

Jak tarovat soubory se seřazeným pořadím?

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.


Linux
  1. Jak šifrovat soubory pomocí gocryptfs na Linuxu

  2. Jak odstranit všechny soubory s konkrétní příponou v konkrétní složce?

  3. Jak vyloučit soubory z archivu TAR pomocí regulárních výrazů?

  1. Jak extrahovat soubory Tar do konkrétního nebo jiného adresáře v Linuxu

  2. Jak zobrazit obsah komprimovaných souborů v Linuxu

  3. Jak mohu zrcadlit adresář pomocí wget bez vytváření nadřazených adresářů?

  1. Cat soubory s adresářem?

  2. Jak gzipovat adresář v Linuxu

  3. Jak změnit vlastnictví souborů a adresářů pomocí příkazu chown