Apakah mungkin untuk mendapatkan rangkaian lengkap opsi unix untuk alat-alat baris perintah pada OS X?

14

Saya mengikuti Tip Alat Unix di Twitter dan menarik bahwa banyak tips yang diposting tidak tersedia di OS X.

Sebagai contoh:

cp - u hanya akan menyalin file yang tidak ada, atau lebih baru dari rekan yang ada, di direktori tujuan.

Mencoba ini di komputer saya menghasilkan:

cp: illegal option -- u
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
   cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory  

Mengapa opsi ini tidak tersedia dan apakah mungkin untuk mengaksesnya di OS X?

DQdlM
sumber
Anda juga dapat menginstal find, sed, dan awk with brew install coreutils findutils gnu-sed gawk. Lihat apple.stackexchange.com/questions/69223/… .
Lri
Peringatan: jika Anda menginstal dan menggunakan versi cli tools cli, Anda mendapatkan ekstensi GNU, tetapi Anda juga kehilangan ekstensi di versi alat OS X. Sebagai contoh, perintah cp dalam coreutils homebrew (dinamai gcpuntuk menghindari kebingungan) tidak tahu cara menyalin metadata kompleks yang dapat dimiliki file OS X (attrs yang diperluas, dll); jadi jika Anda menggunakan gcpfile alias, salinannya akan hilang info penting dan tidak akan berfungsi.
Gordon Davisson
@GordonDavisson, terima kasih atas bantuannya Apakah itu file .file yang ditambahkan pergi semua direktori saya? Saya pikir itu mungkin plus :)
DQdlM
@ KennyPeanuts: Maksud Anda file .DS_Store? Itu mirip tetapi tidak apa yang saya bicarakan (dan gcp -Rakan menyalinnya bersama dengan yang lain). Jika maksud Anda ._somefilename, itu file AppleDouble yang digunakan untuk menyimpan metadata (info yang saya bicarakan) pada beberapa jenis volume asing, yang ... rumit ...
Gordon Davisson
@GordonDavisson terima kasih atas klarifikasi. Ini file ._somefilename yang saya bicarakan.
DQdlM

Jawaban:

12

Dapatkan homebrew dan minta instal utilitas inti. Anda kemudian dapat melihat apakah versi cp GNU mendukung flag yang Anda inginkan. Ini jawaban yang bagus di situs mitra dan saya akan mengutip langkah-langkah persisnya yang Anda perlukan agar cp digantikan oleh versi GNU jika Anda mau:

Inilah homebrew - http://mxcl.github.com/homebrew/
Inilah cerita panjangnya - /superuser/476575/replace-os-xs-shell-commands-with-the-linux-versions/ 476594 # 476594


Contoh dari lingkungan seperti itu adalah [Homebrew] ( http://mxcl.github.com/homebrew/ ) yang misalnya memiliki GNU sed. Setelah menginstal Homebrew, Anda dapat mengetik

brew install coreutils

dan instal GNU Coreutils . Ini akan memberikan Anda dengan sed, date, printf, wcdan banyak alat lainnya yang kapal dengan GNU / Linux, tapi tidak OS X. Namun, agar tidak "override" default OS X binari, mereka akan diawali dengan gsecara default. Jadi, setelah menginstal Coreutils, jika Anda ingin menggunakan GNU, ketikkan

gsed

Jika ini terlalu merepotkan untuk diketik setiap waktu, Anda dapat menambahkan direktori "gnubin" ke PATH Anda dan cukup panggil GNU dengan sed. Anda perlu menambahkan yang berikut ini ke ~/.bash_profile:

PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"

bmike
sumber
Apakah saya boleh menginstal menggunakan port?
Adil Soomro
1
@AdilSoomro macports.org adalah alat yang tahan lama dengan reputasi baik. Saya tidak melihat alasan untuk tidak mencobanya - Saya hanya tidak memiliki pengalaman dan menggunakan dan berkontribusi untuk homebrew.
bmike
3

Alasannya adalah bahwa OSX menggunakan alat baris perintah BSD dan pengguna ujung alat Unix mungkin menggunakan Linux yang menggunakan alat baris perintah GNU.

Anda dapat menginstal alat GNU di OSX (dan BSD di Linux).

Cara termudah adalah dengan menggunakan manajer paket seperti Macports, Homebrew atau Fink

pengguna151019
sumber