Saya memiliki struktur direktori followin:
base/
files/
archives/
scripts/
Saya ingin script untuk menjalankan dari scripts/
, file kompres yang terkait results.*.log
dalam files/
menjadi gzip tar arsip di archives/
.
Saya mencoba perintah berikut:
tar czfC ../archives/archive.tar.gz ../files results.*.log
Tapi saya mengerti
tar: results.*.log: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Sementara
tar czfC ../archives/archive.tar.gz ../files results.a.log
bekerja seperti yang diharapkan. Juga
tar czf ../archives/archive.tar.gz ../files/results.*.log
berfungsi seperti yang saya inginkan, kecuali itu menambahkan awalan files/
ke file dan juga memancarkan peringatan:
tar: Removing leading `../' from member names
Jadi kesimpulan saya adalah bahwa tar
globbing tidak berfungsi dengan baik saat menggunakan -C
opsi. Adakah saran tentang bagaimana saya membuat pekerjaan ini secara sederhana?
cd
terjadi.&&
seperti;
atau baris baru, itu memisahkan dua perintah. Ini seperti mengatakan bahwa setelah dijalankancd
, gumpalan apapun akan memperluas file di direktori sebelumnya.Tidak ada "tar globbing", globbing dilakukan oleh shell. Dan shell tidak memiliki ide yang
tar -C somedir
akan melakukan tugasnyasomedir
, setiap gumpalan diperluas di direktori saat ini.sumber
results.a.log
ada di direktori tempat skrip dijalankan, ia berfungsi. Tapi saya tidak mengerti mengapa ini terjadi, karena-C
singkatan dari direktori perubahan, jadi direktori saat ini harus menjadi satu denganresults.a.log
. Saya tidak dapat menerima jawaban Anda karena Anda tidak menawarkan solusi.tar
program, yang mengubah direktori jauh kemudian. Tidak dapat "menyelesaikan" masalah Anda, maaf. Satu-satunya jalan keluar adalah pindah ke direktori tempat Anda ingin glob, atau lakukan globbing di direktori dan menyimpan hasilnya dalam file atau variabel.Anda dapat membiarkan
find
melakukan globbing dan menghilangkan opsi 'direktori perubahan'tar
dengan menghapusfiles/
awalan sebelum membuat tarfile.The
--no-recursion
pilihan untuktar
opsional karena tidak ada direktori akan diarsipkan.sumber
Akhirnya saya pakai
sumber
Cara untuk melakukannya adalah menulis sesuatu seperti berikut:
sumber
Bukan tar yang melakukan globbing, melainkan shell. Anda pertama-tama menyuruh shell untuk melakukan globbing, lalu menyuruh tar untuk mengubah direktori. Karena tar menerima daftar nama file relatif terhadap direktori asli, ini tidak berfungsi.
Solusi termudah sejauh ini adalah membiarkan shell mengubah direktori. Secara interaktif:
Dalam naskah:
atau
sumber