Perintah ini dengan * di jalur temukan berfungsi dengan baik di server lokal
Svr1$ find /path/*/foo/ -name "*20160208"
Ketika saya mencoba ini dari jarak jauh dari server lain itu tidak berfungsi
Svr2$ ssh Svr1 find '/path/*/foo/' -name "*20160208*"
Pesan kesalahan adalah:
find: stat() error /path/*/foo/: No such file or directory
Namun, jika saya mengubah jalur pencarian untuk menghindari penggunaan * itu berfungsi dengan baik. Seperti ini:
Svr2$ ssh Svr1 find '/path/' -name "*20160208*"
Ada yang tahu apa yang saya lakukan salah?
Terimakasih banyak.
'/path/*/foo/'
ke/path/*/foo/
?Jawaban:
Masalah Anda adalah bahwa perintah find tidak menginterpolasi / menafsirkan globe glob (s) (daftar direktori yang harus dicari di bawah), itu hanya menginterpolasi pola sebagai bola yang harus cocok. Apa yang mengartikan direktori glob adalah shell itu sendiri yang Anda jalankan temukan di dalamnya. Ketika Anda menjalankan find via ssh, tidak ada shell untuk melakukan pekerjaan ini.
Untungnya, tidak ada aturan untuk tidak menjalankan shell melalui ssh dan membuat shell itu menjalankan perintah Anda dengan semua hal yang diperlukan diinterpolasi dan sisa wildcard disimpan untuk menemukan dirinya sendiri.
Sesuatu seperti apa yang saya gunakan pada mesin saya:
sumber
Cara Anda menulisnya dievaluasi pada host lokal, yang biasanya sesuatu yang tidak Anda inginkan. Anda perlu menghindari urutan untuk membiarkannya mengevaluasi pada host lain. Sesuatu seperti ini harus melakukan itu:
sumber