Saya memiliki ribuan file unl bernama sesuatu seperti ini cbs_cdr_vou_20180624_603_126_239457.unl
. Saya ingin mencetak semua baris dari file-file itu dengan menggunakan perintah berikut. tapi itu hanya memberi saya nama file. Saya tidak perlu nama file, saya hanya perlu konten dari file-file itu.
find -type f -name 'cbs_cdr_vou_20180615*.unl' > /home/fifa/cbs/test.txt
Output Saat Ini:
./cbs_cdr_vou_20180615_603_129_152023.unl
./cbs_cdr_vou_20180615_603_128_219001.unl
./cbs_cdr_vou_20180615_602_113_215712.unl
./cbs_cdr_vou_20180615_602_120_160466.unl
./cbs_cdr_vou_20180615_603_125_174428.unl
./cbs_cdr_vou_20180615_601_101_152369.unl
./cbs_cdr_vou_20180615_603_133_193306.unl
Output yang diharapkan:
8801865252020|200200|20180613100325|;
8801837463298|200200|20180613111209|;
8801845136955|200200|20180613133708|;
8801845205889|200200|20180613141140|;
8801837612072|200200|20180613141525|;
8801877103875|200200|20180613183008|;
8801877167964|200200|20180613191607|;
8801845437651|200200|20180613200415|;
8801845437651|200200|20180613221625|;
8801839460670|200200|20180613235936|;
Harap dicatat bahwa, untuk perintah cat saya mendapatkan kesalahan seperti -bash: /bin/logger: Argument list too long
itu sebabnya saya ingin menggunakan find
alih-alih cat
perintah.
cat
.Jawaban:
The
find
utilitas berhubungan dengan nama path. Jika tidak ada tindakan spesifik yang disebutkan dalamfind
perintah untuk nama path yang ditemukan, tindakan default adalah untuk menghasilkannya.Anda mungkin melakukan tindakan pada nama path ditemukan, seperti menjalankan
cat
, dengan menambahkan-exec
kefind
perintah:Ini akan menemukan semua file biasa di atau di bawah direktori saat ini, yang namanya cocok dengan pola yang diberikan. Untuk sebanyak mungkin kumpulan ini,
cat
akan dipanggil untuk menyatukan isi file.Outputnya akan pergi ke
/home/fifa/cbs/test.txt
.Terkait:
sumber
Output
find
akan dihasilkan dengan nama file yang relevan.Anda dapat mem-pipe (
|
) outputxargs cat
yang akan melakukancat
perintah pada setiap file.misalnya:
Opsi lain adalah menggunakan
-exec cat
sumber
-exec cat {} \;
dan-exec -cat {} +
. Ngomong-ngomong, terima kasih banyak Yaron.find -print0 | xargs -0
tidak rentan terhadap spasi / kutipan / dll.-exec cat {} \;
menjalankan cat secara terpisah untuk setiap file alih-alih mengumpulkannya seperti xargs. Jangan menggunakannya kecuali Anda secara eksplisit menginginkannya (mis. Perintah yang hanya berfungsi untuk satu file pada satu waktu), atau jika Anda memerlukan portabilitas ke sistem tanpa-exec ... +
dan tanpa-print0
/xargs -0
. Saya sedikit terkejut bahwafind|xargs
ini lebih lambat dari pada diukur-exec cat {} +
. Apakah Anda memiliki total file yang sangat sedikit, sehingga biaya overhead startup adalah banyak biaya? Atau apakah Anda hanya mengatur waktuxargs
versi sementara cache disk Anda dingin?