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.

gidyn
sumber
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)

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

Anthon
sumber
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.
Shital Shah
sumber