comando tar - salta i collegamenti simbolici


13

Uso il comando tar come

tar -cvf protTests.tar protTests/*

a tartutti i file all'interno della cartella, protTests. Ma questo include i collegamenti simbolici all'interno della cartella, che non è desiderato.

Esiste un'opzione da riga di comando che tralascerà tutti i collegamenti simbolici?

Risposte:


11

Puoi farlo, per fornire tarun elenco di tutti i file all'interno protTeststranne quelli che sono collegamenti simbolici:

find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
  tar --null --files-from - -cvf protTests.tar

A proposito, il tuo comando esistente:

tar -cvf protTests.tar protTests/*

non archivia tutti i file protTests, archivia solo quelli i cui nomi non iniziano con .(quelli che non sono nascosti). L' *operatore glob salta i file i cui nomi iniziano con la .progettazione. Il comando ha anche il problema che se protTestsha molti file (più di molte migliaia), allora protTests/*può espandersi a troppi argomenti per adattarsi alla riga di comando.

Un comando più semplice come questo non avrebbe nessuno di questi problemi:

tar -cvf protTests.tar protTests

1
Tar non ha alcuna opzione --files-from, questa è un'opzione di gtar, quindi dai un tale consiglio, meglio menzionare che questo è specifico di gtar. Trova non ha alcun primario -not, questo è un altro GNUismo non portatile. In generale, è una cattiva idea utilizzare una chiamata di ricerca separata. Questo può dare problemi con caratteri divertenti nel nome del file e sicuramente offre prestazioni basse poiché sia ​​find che tar devono scansionare il filesystem. Questi problemi non si applicano ai programmi come star che usano libfind e quindi hanno il codice find incorporato.
schily,

Consentitemi di aggiungere un altro suggerimento generale: nel dare un consiglio specifico per una variante specifica di un programma UNIX, è buona norma menzionare il fornitore e che è specifico del fornitore. Questo in genere può essere fatto usando i nomi ufficiali del software, ad esempio gtar invece di tar, vim invece di vi. Si noti che questa è una piattaforma di informazioni relative a UNIX, quindi in generale gli esempi dovrebbero essere allineati con lo standard POSIX.
schily,

Hai ragione, @schily, questa è una soluzione specifica per GNU. La tua risposta basata su starè una buona alternativa e l'ho votata per questo motivo. Concordo anche con l'obiezione "personaggi divertenti" ma poiché GNU tarnon ha -0un'opzione è un compromesso. Non sono d'accordo con l'obiezione di prestazione, che in realtà non ha alcuna conseguenza in questa situazione.
Celada,

2
@schily, sia GNU tarche bsdtarhave --files-frome --nullche rimuove il problema con personaggi divertenti (se combinati con find's -print0o -exec printf '%s\0' {} +). Ma qui, probabilmente vorrai aggiungere l' --no-recursionopzione. Alcune paximplementazioni hanno anche -0un'opzione.
Stéphane Chazelas,

2
@schily Sento che questo thread di commenti non è il posto adatto per le diverse versioni di tar. Per favore, portalo in chat . È già troppo lungo e legge come una guerra religiosa. A meno che, a questo punto, l'OP non entri in azione, non credo sia importante quale versione tarsia in uso. Non sappiamo nemmeno che tipo di Unix stiano usando.
Celada,

-2

La mia implementazione tar è il metodo migliore

star -cv -f out.tar -find protTests ! -type l

8
zsh: command not found: starQuando parli di utilità che conosci> il 99% dei tuoi lettori non avrà sui tuoi sistemi, spiega dove trovarle. E devi rivelare la tua affiliazione quando menzioni il tuo prodotto (sia che pubblichi il link o meno, quindi potresti anche pubblicare il link).
Gilles 'SO- smetti di essere malvagio'

Un tipico sistema Linux al giorno d'oggi manca molto software importante dopo un'installazione predefinita e allo stesso tempo viene installato un sacco di software inutile. Un utente Linux dovrebbe sapere come installare il software mancante e le persone che usano frequentemente tar in genere hanno comunque installato una stella.
schily

8
La stragrande maggioranza delle persone che usano frequentemente catrame non hanno mai sentito parlare di pax, figuriamoci stella.
Gilles 'SO- smetti di essere malvagio'

Beh, quelle persone che non sanno di usare gtar su Linux quando chiamano "tar" probabilmente non sono le persone a cui importa comunque. Star è la più antica implementazione di tar gratuita e molte funzionalità viste in varie implementazioni di tar sono state prese da Star, quindi perché non parlare dell'originale?
schily
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.