Tar daftar file yang tidak semuanya ada


10

Saya menjalankan perintah dari script seperti

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

di mana b, c, dan d mungkin tidak ada, dan mungkin direktori. Solusi yang saya buat adalah menyalurkan output ls -dke grep, kemudian menyambungkannya ke dalam tarperintah, atau mengaktifkan gumpalan diperpanjang untuk @(a|b|c|d).

Apakah ada cara yang lebih rapi untuk melakukan ini? Saya menggunakan Debian Wheezy, yang sepertinya tidak memiliki --includeparameter.


Apakah Anda punya --ignore-failed-readpilihan?
Costas

1
Mencobanya, masih memberi kesalahan untuk file yang tidak ada sama sekali.
gidyn

1
Ya, pesan kesalahan ada tetapi arsip dibuat.
Costas

Jawaban:


8

Anda dapat mencoba

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

dimana

  • c untuk buat
  • f ar.tar tentukan file tar

  • $(ls a b c d) akan mendaftar ke stdin file mana yang benar-benar ada (dan memberikan kesalahan untuk yang lain)


2
tar cf ar.tar $(ls -d a b c d 2>/dev/null)berfungsi dengan baik .. tapi saya pikir ini lebih bersih dengan extglob
gidyn

sekarang saya porting skrip ke dash, jadi tidak extglob- saya menggunakan kode dalam komentar saya di atas
gidyn

1

Jika boleh memiliki path lengkap file dalam arsip tar, Anda dapat melakukannya:

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

The -epilihan untuk readlink akan canonicalize nama file yang ada dan diam-diam mengabaikan orang lain.


Saya kira itu mungkin berhasil jika saya --strip-componentssedang mengekstraksi.
gidyn

0

Menggunakan

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

Penjelasan

  1. Parameter pertama adalah direktori yang ingin Anda cari.
  2. Secara default findmelakukan rekursi.
  3. The -osingkatan -or. Jadi di atas berarti mencari wildcard ini ATAU yang ini. Jika Anda hanya memiliki satu pola maka tidak perlu -o.
  4. Kutipan di sekitar pola wildcard diperlukan.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.