Saya ingin mengarahkan output dari find
perintah ke cat
perintah sehingga saya dapat mencetak data dari file yang diberikan.
Jadi misalnya jika output dari find /aFile/readme
maka kucing harus diartikan sebagai cat ./aFile/readme
. Bagaimana saya bisa melakukan itu secara instan?
Apakah saya harus menggunakan pipa?
Saya mencoba versi ini:
cat | find ./inhere -size 1033c 2> /dev/null
Tapi saya kira ini sepenuhnya salah? Tentu saja saya yakin bahwa outputnya hanya satu file dan bukan banyak file.
Jadi bagaimana saya bisa melakukan itu? Saya telah mencari di Google dan tidak dapat menemukan solusi, mungkin karena saya tidak mencari dengan benar: P.
cat
's-n
pilihan mengejutkan saya. Saya suka membaca pertanyaan acak.Substitusi Perintah
Pilihan lain adalah dengan menggunakan Substitusi Perintah . Membungkus perintah
$()
akan menjalankan perintah dan mengganti perintah dengan outputnya.akan menjadi
Ini kurang lebih setara dengan menggunakan gaya pembungkus yang lebih tua dengan kutu belakang:
Lebih detail dari dokumen yang ditautkan di atas
Bash melakukan ekspansi dengan mengeksekusi perintah di lingkungan subkulit dan mengganti substitusi perintah dengan output standar dari perintah, dengan setiap baris baru yang tertinggal dihapus. Baris baru yang disematkan tidak dihapus, tetapi mereka dapat dihapus selama pemisahan kata. Substitusi perintah
$(cat file)
dapat diganti dengan yang setara tetapi lebih cepat$(< file)
.Ketika bentuk backquote gaya lama substitusi yang digunakan, backslash mempertahankan arti harfiahnya kecuali jika diikuti oleh
$
,`
atau\
. Backquote pertama yang tidak diawali dengan backslash mengakhiri substitusi perintah. Saat menggunakan$(command)
formulir, semua karakter di antara tanda kurung membuat perintah; tidak ada yang diperlakukan secara khusus.Pergantian perintah dapat disarangkan. Untuk bersarang saat menggunakan formulir backquoted, lepas backquotes dalam dengan backslash.
Jika substitusi muncul dalam tanda kutip ganda, pemisahan kata dan ekspansi nama file tidak dilakukan pada hasil.
Lihat jawaban lain ini untuk beberapa contoh penggunaan yang baik.
sumber
find
menemukan terlalu banyak file, ini akan menghasilkan galat "daftar argumen terlalu panjang" ketika mencoba memohoncat
. Itu juga akan memiliki masalah menangani nama file yang mengandung karakter spasi dan mungkin juga nama file yang mengandung karakter nama globbing.Ini akan mencetak nama dan isi file teks (ascii) saja secara rekursif ..
Satu upaya lagi
sumber
Gunakan pipa dan xarg
Jika gagal karena kurangnya izin, Anda dapat menggunakan sudo untuk memastikan Anda memiliki izin untuk mengeksekusi perintah find pada direktori yang Anda cari.
sumber
/tmp/ /dev/urandom /pg_hba.conf
, itu akan membiarkan root membuang seluruh konten/dev/urandom
. Lebih buruk mungkin bisa dilakukan tergantung pada konteksnya.xargs
seharusnya hampir tidak pernah digunakan tanpa-0
jika sama sekali. Jugasudo xargs
akan lebih baik daripadaxargs sudo
. Dan/*
akan lebih baik/
.find|xargs
tanpa-0
harus benar-benar dilarang), karenanya suara turun. Output darifind
tanpa-print0
post-processable dapat diandalkan.-print0
tidak standar. Karena itu, standarsudo find / -name pg_hba.conf -exec cat {} +
juga dapat membuat Anda membuang konten/dev/urandom
(misalnya jika seseorang membuat symlink/tmp/pg_hba.conf
darinya dan tidak ada cara portabel yang mudah yang tidak setidaknya memiliki kondisi balapan).sudo
"berjaga-jaga", oke?sudo rm -rf /