Unix menemukan tidak bekerja dengan wildcard di jalan ketika ssh'ing

3

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.

LLJ
sumber
membintangi tanda kutip membuatnya harfiah
barlop
bagaimana jika Anda mengubah '/path/*/foo/'ke /path/*/foo/?
barlop
Sebenarnya, itulah yang saya miliki pada awalnya dan tidak berhasil. Saya mengajukan pertanyaan di sini dan diberitahu untuk memberi tanda kutip pada path. Itu masih tidak berfungsi dan saya kehabisan ide.
LLJ

Jawaban:

4

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:

ssh lx@localhost "bash -c '/usr/bin/find /tmp/d* -name \"f*\" '"
lx@localhost's password:
/tmp/d1/f1
/tmp/d2/f2
Gombai Sándor
sumber
0

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:

Svr2$ ssh Svr1 "find /path/*/foo/ -name \"*20160208*\""
Jakuje
sumber