Sebagai contoh: Di direktori / temp saya, saya punya 100 file .. 50 dengan ekstensi .msg dan 50 dengan .xml.
/temp/test1.xml
/temp/test2.xml
/temp/test3.xml
.........
/temp/test49.xml
/temp/test50.xml
dan
/temp/test1.msg
/temp/test2.msg
/temp/test3.msg
.........
/temp/test49.msg
/temp/test50.msg
Dalam file teks, saya ingin menampilkan kombinasi konten file .xml dan .msg satu demi satu. Misalnya file output akan terlihat seperti:
content of test1.xml
content of test1.msg
content of test2.xml
content of test2.msg
content of test3.xml
content of test3.msg
............
content of test49.xml
content of test49.msg
content of test50.xml
content of test50.msg
dalam direktori / temp ini akan selalu ada jumlah file .msg dan .xml yang sama. Selain itu, mungkinkah untuk menunjukkan path atau nama file sebelum konten dalam file output? sebagai contoh:
text1.xml: content of test1.xml
text1.msg: content of test1.msg
text2.xml: content of test2.xml
text2.msg: content of test2.msg
text3.xml: content of test3.xml
text3.msg: content of test3.msg
....................
text49.xml: content of test49.xml
text49.msg: content of test49.msg
text50.xml: content of test50.xml
text50.msg: content of test50.msg
Saya telah mencoba pipa sederhana ke file
cat * > text.txt
tetapi ini tidak memberikan hasil yang diperlukan. Dalam file output, pertama-tama daftar konten semua file * .xml kemudian file *.
Tolong bantu.
cat *
dapat mendaftar semua file XML sebelum semua file pesan. Dapatkah Anda menguraikan itu? (Juga, milikmucat
perintah tidak memiliki pipa apa pun; hanya menggunakan pengalihan I / O.)Jawaban:
Mungkin berfungsi untuk Anda, jika Anda menggunakan
bash
kulit. Kalau tidak (kerang POSIX lainnya) gunakan:cat "$f" "${f%.xml}.msg"
bukannya yang di atascat
baris.sumber
cat "$f" "$(basename "$f" .xml).msg")
sebagai gantinya.${f%.xml}.msg
harus bekerja di setiap shell POSIX (${f/.xml/.msg}
adalahbash
aliran).Dalam situasi seperti ini, sering masuk akal untuk melanjutkan sebagai berikut:
Daftar semua file ke dalam file teks:
Edit file teks, untuk menghapus file yang tidak diinginkan dan untuk mengatur yang tersisa ke dalam urutan yang Anda inginkan.
Maka lakukan saja ini (dengan asumsi tidak ada file yang memiliki spasi atau karakter lucu dalam namanya):
Variasi pada pendekatan ini adalah mengubah file teks menjadi satu perintah besar, dari
untuk:
Kemudian cukup sumber file sebagai skrip:
Spasi dan garis miring terbalik dapat ditambahkan ke setiap baris di buffer
vi
menggunakan:%s/$/ \\/
.sumber
sumber
{1..50}
ekspresi juga Bashisme.Ini sepertinya berhasil:
sumber
Jika urutannya normal, Anda dapat melakukan ini:
dalam bash:
atau jika Anda memiliki utilitas
seq
sumber