Perintah “find” Terminal Mac: Apa arti slash ganda pada hasil keluaran?

9

Saya menggunakan perintah-cari untuk mencari di dalam struktur direktori yang besar dan bersarang.

Dalam hasil-output kadang-kadang double-slash (//) disertakan.

Contoh (setelah "Unduhan"):

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf

Saya pertama kali berpikir itu akan menandai direktori kerja saat ini. Tapi bukan itu masalahnya.

Apa arti dari tebasan ganda ini?

Biasanya saya salin hasilnya ke clipboard, ganti ke finder. Lalu "geser" + "perintah" + "g" dan tempelkan path (hingga file) ke dalam kotak. Sehingga direktori yang berisi dibuka.

Bekerja dengan baik. Tapi double-slash saya harus hapus secara manual.

Karena itu: Bagaimana saya bisa menghindarinya?

mizech
sumber
2
Perhatikan bahwa Anda tidak harus menghapus garis miring ganda. Double slash hanya spesial di awal jalan, dan hanya jika itu tepat dua tebasan. Beberapa garis miring di tengah atau di akhir atau sejumlah garis miring dari tepat dua di awal yang persis sama dengan satu garis miring. Itu dijamin oleh spesifikasi POSIX / SUS.
Jörg W Mittag

Jawaban:

17

findagak harfiah. Ketika Anda memintanya untuk mencari di dalam "~ / Downloads /", ia menggunakan itu (termasuk garis miring) sebagai awalan untuk apa pun yang ditemukannya. Karena ada garis miring yang tidak perlu dan tidak relevan di ujung jalan yang Anda berikan, Anda berakhir dengan garis miring yang tidak perlu dan tidak relevan dalam output.

Solusi: hapus trailing "/" dari direktori pencarian:

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf
#> find ~/Downloads -iregex ".*some.*"
/Users/michael/Downloads/subDirectory/some_file.pdf
Gordon Davisson
sumber
4

Apa arti dari tebasan ganda ini?

Berarti Anda menggunakan BSD tua yang aneh.

Bagaimana saya bisa menghindarinya?

Anda memang dapat menghilangkan garis miring pada perintah asli Anda, tetapi karena ditambahkan secara otomatis melalui penyelesaian tab (yang Anda harus menggunakan sebanyak mungkin), & karena garis miring tersebut sebenarnya digunakan di berbagai tempat di tempat lain untuk memastikan Anda Berhubungan dengan direktori dan bukan nama file, menghilangkannya berlawanan dengan intuisi & konyol.

Sebagai gantinya, saya sarankan melakukan salah satu dari hal-hal ini:

a) Buat pembungkus untuk menemukan bahwa pipa untuk sed: | sed 's @ // @ / @'

b) Instal GNU's findutils dengan 'brew install findutils' dan kemudian gunakan 'gfind' secara langsung, alias 'find' ke 'gfind', atau tambahkan / usr / local / opt / findutils / libexec / gnubin ke path Anda (yang juga menambahkan GNU findutils '' cari ',' updatedb ', &' xargs ').

c) Beralih ke OS GNU / Linux yang tepat yang tidak akan memiliki masalah ini (& seribu orang lainnya) sejak awal. : p

Jan Kyu Peblik
sumber
1
Tambahkan saja set mark-directories offke. inputrcdan kamu baik untuk pergi. Dari salah satu orang tua BSD itu.
fd0
@ fd0 maka seseorang tidak akan dapat membedakan antara direktori dan file dengan nama yang sama; itu adalah penemuan BSD yang sedikit kasar di sini, bukan bash atau readline
Jan Kyu Peblik