GNU/Linux >> Linux Esercitazione >  >> Linux

Come tarare i file con un ordine ordinato?

Per un tar GNU :

--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.

Probabilmente vorrai anche guardare --preserve-order .


Con zsh , invece di:

pax -w dir

Usa:

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

Puoi fare lo stesso con le versioni recenti di bash -O globstar -O dotglob con:

pax -dw dir/**

O versioni recenti di FIGNORE='@(.|..)' ksh93 -o globstar con:

pax -dw dir dir/**

pax è il comando standard per creare tar File. L'output va a stdout. I glob della shell sono ordinati per nome.

Se ti imbatti in un elenco Arg troppo lungo errore, puoi modificare in:

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

(non tutti i pax le implementazioni supportano -0 però).


tar stesso non può farlo, quindi devi crearlo da un elenco correttamente ordinato. In linea di principio potresti quindi utilizzare tar -T di opzione, ma non c'è modo di specificare che i nomi di file in quell'elenco debbano terminare con NUL. Quindi, se hai nomi di file con caratteri di nuova riga (il che è consentito), questo si interromperà.

Un'opzione migliore è usare cpio per generare i file in quanto accetta un elenco di nomi di file con terminazione NUL e può generare file tar.

Se il tuo tar comando sarebbe:

tar cvf /somedir/all.tar .

Quindi per ordinare questo per nome dovresti fare (assumendo GNU find e cpio):

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

Questo ha lo svantaggio però che le sottodirectory sono posizionate tra i nomi dei file. Puoi fare trucchi con find s -printf0 specificando la directory e le informazioni di profondità e ordinando con sort -n ma ciò influenza anche il modo in cui i file con i numeri vengono ordinati all'interno di una directory.

Se quanto sopra non è soddisfacente, probabilmente potresti usare un piccolo programma python basato su os.walk() per generare l'ordinamento che desideri con il pieno controllo (prima la profondità, in base all'estensione ecc.), ma se segui questa strada potresti anche abbandonare cpio e scrivi il tar file con tarfile di Python modulo.


Linux
  1. Come gzippare una directory in Linux

  2. Come trovare tutti i file con dimensione del file zero (0) byte in una directory in modo ricorsivo

  3. Come posso eseguire il mirroring di una directory con wget senza creare directory principali?

  4. Come trovare tutti i file con una particolare directory principale in Linux?

  5. Come escludere i file dall'archivio TAR usando le espressioni regolari?

Come contare i file nella directory in Linux

Come eseguire il tar di tipi di file specifici (estensioni) in una directory

Come contare i file nella directory su Linux

Guida introduttiva al comando Tar

Come caricare file con FileZilla

Come rinominare tutti i file con caratteri speciali e spazi in una directory?