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 -d
ke grep
, kemudian menyambungkannya ke dalam tar
perintah, 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 --include
parameter.
--ignore-failed-read
pilihan?Jawaban:
Anda dapat mencoba
dimana
c
untuk buatf 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)sumber
tar cf ar.tar $(ls -d a b c d 2>/dev/null)
berfungsi dengan baik .. tapi saya pikir ini lebih bersih dengan extglobextglob
- saya menggunakan kode dalam komentar saya di atasJika boleh memiliki path lengkap file dalam arsip tar, Anda dapat melakukannya:
The
-e
pilihan untuk readlink akan canonicalize nama file yang ada dan diam-diam mengabaikan orang lain.sumber
--strip-components
sedang mengekstraksi.Menggunakan
Penjelasan
find
melakukan rekursi.-o
singkatan-or
. Jadi di atas berarti mencari wildcard ini ATAU yang ini. Jika Anda hanya memiliki satu pola maka tidak perlu-o
.sumber