Tar un elenco di file che non esistono tutti


10

Sto eseguendo un comando da uno script come

tar -c -f ar.tar a b c d

dove b, c e d potrebbero non esistere e potrebbero essere directory. Le soluzioni che ho escogitato stanno eseguendo il piping dell'output di ls -dto grep, quindi collegandolo al tarcomando o attivando globs estesi per @(a|b|c|d).

C'è un modo più ordinato di farlo? Sono su Debian Wheezy, che non sembra avere un --includeparametro.


Hai --ignore-failed-readun'opzione?
Costas,

1
Provato, ha comunque dato un errore per i file che non esistono affatto.
Gidyn,

1
Sì, è presente un messaggio di errore ma l'archivio è stato creato.
Costas,

Risposte:


8

Puoi provare

 tar cf ar.tar $(ls a b c d )

dove

  • c per creare
  • f ar.tar specifica il file tar

  • $(ls a b c d) elencherà a stdin quale file è realmente presente (e fornirà un errore per altri)


2
tar cf ar.tar $(ls -d a b c d 2>/dev/null)funziona perfettamente .. ma penso che sia più pulito con extglob
gidyn

ora sto eseguendo il porting dello script per trattarli, quindi no extglob- sto usando il codice nel mio commento sopra
gidyn

1

Se è ok avere il percorso completo dei file nell'archivio tar puoi fare:

tar -c -f ar.tar $(readlink -e a b c d)

L' -eopzione di readlink canonicalizzerà i nomi di file esistenti e ignorerà silenziosamente tutti gli altri.


Immagino che potrebbe funzionare se --strip-componentsdurante l'estrazione.
Gidyn,

0

Uso

find path/to/dir -name "*.ext1" -o -name "*.ext2"

Spiegazione

  1. Il primo parametro è la directory che si desidera cercare.
  2. Di default findfa la ricorsione.
  3. Lo -osta per -or. Quindi sopra significa cercare questo jolly O questo. Se hai un solo motivo, non è necessario -o.
  4. Sono richieste le virgolette attorno al modello jolly.
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.