Catatan:
* Jawaban ini mungkin lebih dalam dari waran yang digunakan, dan find 2>/dev/null
mungkin cukup baik dalam banyak situasi. Mungkin masih menarik untuk perspektif lintas-platform dan untuk diskusi tentang beberapa teknik shell canggih demi menemukan solusi yang sekuat mungkin, meskipun kasus-kasus yang dijaga terhadapnya mungkin sebagian besar hipotetis.
* Jika sistem Anda dikonfigurasikan untuk menampilkan pesan kesalahan lokal , awali find
panggilan di bawah ini dengan LC_ALL=C
( LC_ALL=C find ...
) untuk memastikan bahwa pesan bahasa Inggris dilaporkan, sehingga grep -v 'Permission denied'
berfungsi sebagaimana dimaksud. Selalu, bagaimanapun, pesan kesalahan yang tidak bisa ditampilkan kemudian dalam bahasa Inggris juga.
Jika shellbash
zsh
Anda atau , ada solusi yang kuat namun cukup sederhana , hanyafind
menggunakan fitur yang sesuai dengan POSIX ; sementara bash
itu sendiri bukan bagian dari POSIX, sebagian besar platform Unix modern datang bersamanya, membuat solusi ini sangat portabel:
find . > files_and_folders 2> >(grep -v 'Permission denied' >&2)
Catatan: Ada kemungkinan kecil bahwa beberapa grep
output mungkin tiba setelah find
selesai, karena perintah keseluruhan tidak menunggu perintah di dalam >(...)
selesai. Di bash
, Anda dapat mencegah ini dengan menambahkan | cat
perintah.
>(...)
adalah substitusi proses output (jarang digunakan) yang memungkinkan redirect output (dalam hal ini, stderr output ( ) ke stdin dari perintah di dalam .
Selain dan , mendukung mereka pada prinsipnya , tetapi mencoba menggabungkannya dengan redirection dari stderr , seperti yang dilakukan di sini ( ), tampaknya diabaikan (dalam ) secara diam-diam .2>
>(...)
bash
zsh
ksh
2> >(...)
ksh 93u+
grep -v 'Permission denied'
menyaring keluar ( -v
) semua lini (dari find
aliran stderr perintah ini) yang mengandung frase Permission denied
dan output garis tersisa untuk stderr ( >&2
).
Pendekatan ini adalah:
robust : grep
hanya diterapkan pada pesan kesalahan (dan tidak ke kombinasi jalur file dan pesan kesalahan, berpotensi mengarah ke positif palsu), dan pesan kesalahan selain yang ditolak izin dilewatkan, ke stderr.
efek samping bebas : find
's kode keluar yang diawetkan: ketidakmampuan untuk mengakses setidaknya salah satu item filesystem ditemui hasil dalam kode keluar 1
(meskipun yang tidak akan memberitahu Anda apakah kesalahan lain daripada yang izin-membantah terjadi (juga)).
Solusi yang sesuai dengan POSIX:
Solusi yang sepenuhnya sesuai dengan POSIX memiliki keterbatasan atau membutuhkan pekerjaan tambahan.
Jika find
keluaran adalah untuk ditangkap dalam sebuah berkas pula (atau ditekan sama sekali), maka solusi berbasis pipa dari jawaban Jonathan Leffler sederhana, kuat, dan POSIX-compliant:
find . 2>&1 >files_and_folders | grep -v 'Permission denied' >&2
Perhatikan bahwa urutan hal-hal pengalihan: 2>&1
harus datang pertama .
Menangkap output stdout dalam file di depan memungkinkan 2>&1
untuk hanya mengirim pesan kesalahan melalui pipa, yang grep
kemudian dapat beroperasi secara jelas.
Satu- satunya downside adalah bahwa kode keluar keseluruhan akan menjadi grep
perintah , bukan find
, yang dalam hal ini berarti: jika tidak ada kesalahan sama sekali atau hanya kesalahan izin ditolak, kode keluar akan menjadi 1
( kegagalan pensinyalan ), jika tidak ( kesalahan selain dari izin yang ditolak) 0
- yang merupakan kebalikan dari maksud.
Yang mengatakan, find
kode keluar jarang digunakan , karena sering menyampaikan sedikit informasi di luar kegagalan mendasar seperti melewati jalur yang tidak ada.
Namun, kasus spesifik bahkan hanya beberapadari jalur masukan yang tidak dapat diakses karena kurangnya hak akses yang tercermin dalam find
's kode keluar (di kedua GNU dan BSD find
): jika kesalahan izin-membantah terjadi untuk setiap file diproses, kode keluar diatur ke 1
.
Variasi berikut membahas bahwa:
find . 2>&1 >files_and_folders | { grep -v 'Permission denied' >&2; [ $? -eq 1 ]; }
Sekarang, kode keluar menunjukkan apakah ada kesalahan selain yang Permission denied
terjadi: 1
jika demikian, 0
sebaliknya.
Dengan kata lain: kode keluar sekarang mencerminkan maksud sebenarnya dari perintah: sukses ( 0
) dilaporkan, jika tidak ada kesalahan sama sekali atau hanya kesalahan izin yang ditolak terjadi.
Ini bisa dibilang lebih baik daripada hanya melewati find
kode keluar, seperti pada solusi di atas.
gniourf_gniourf dalam komentar mengusulkan generalisasi (masih sesuai-POSIX) dari solusi ini menggunakan pengalihan canggih , yang bekerja bahkan dengan perilaku default mencetak jalur file ke stdout :
{ find . 3>&2 2>&1 1>&3 | grep -v 'Permission denied' >&3; } 3>&2 2>&1
Singkatnya: deskriptor file khusus 3
digunakan untuk bertukar sementara stdout ( 1
) dan stderr ( 2
), sehingga pesan kesalahan saja dapat disalurkan ke grep
via stdout.
Tanpa pengalihan ini, data (jalur file) dan pesan kesalahan akan disalurkan grep
melalui stdout, dan grep
kemudian tidak akan dapat membedakan antara pesan kesalahan Permission denied
dan file (hipotetis) yang namanya mengandung frase tersebut Permission denied
.
Akan tetapi, seperti pada solusi pertama, kode keluar yang dilaporkan adalah grep
, bukan find
, tetapi perbaikan yang sama seperti di atas dapat diterapkan.
Catatan tentang jawaban yang ada:
Ada beberapa poin yang perlu diperhatikan tentang jawaban Michael Brux ini , find . ! -readable -prune -o -print
:
Itu membutuhkan GNU find
; terutama, itu tidak akan berfungsi pada macOS. Tentu saja, jika Anda hanya perlu perintah untuk bekerja dengan GNU find
, ini tidak akan menjadi masalah bagi Anda.
Beberapa Permission denied
kesalahan mungkin masih muncul: find ! -readable -prune
melaporkan kesalahan semacam itu untuk item anak - anak dari direktori di mana pengguna saat ini memiliki r
izin, tetapi tidak memiliki izin x
(dapat dieksekusi). Alasannya adalah karena direktori itu sendiri dapat dibaca, -prune
tidak dieksekusi, dan upaya untuk turun ke direktori itu kemudian memicu pesan kesalahan. Yang mengatakan, kasus khas adalah r
izin hilang.
Catatan: Poin berikut ini adalah masalah filosofi dan / atau kasus penggunaan khusus, dan Anda mungkin memutuskan itu tidak relevan bagi Anda dan bahwa perintah itu sesuai dengan kebutuhan Anda dengan baik, terutama jika hanya mencetak jalur yang Anda lakukan:
- Jika Anda mengkonseptualkan pemfilteran pesan kesalahan yang ditolak izin sebagai tugas terpisah yang ingin Anda bisa terapkan pada perintah apa pun
find
, maka pendekatan sebaliknya untuk mencegah kesalahan yang ditolak izin secara proaktif mengharuskan memasukkan "noise" ke dalam find
perintah, yang juga memperkenalkan kompleksitas dan perangkap logis .
- Sebagai contoh, komentar yang paling banyak dipilih pada jawaban Michael (pada tulisan ini) mencoba untuk menunjukkan bagaimana memperluas perintah dengan memasukkan
-name
filter, sebagai berikut:
find . ! -readable -prune -o -name '*.txt'
Akan tetapi, ini tidak berfungsi seperti yang dimaksudkan, karena -print
tindakan trailing diperlukan (penjelasan dapat ditemukan dalam jawaban ini ). Kehalusan seperti itu dapat menyebabkan bug.
Solusi pertama di jawaban Jonathan Leffler , find . 2>/dev/null > files_and_folders
, karena ia sendiri menyatakan, membabi buta membungkam semua pesan kesalahan (dan solusi yang rumit dan tidak sepenuhnya kuat, karena ia juga menjelaskan). Namun demikian, secara pragmatis , ini adalah solusi paling sederhana , karena Anda mungkin puas mengasumsikan bahwa setiap dan semua kesalahan akan terkait dengan izin.
Jawaban kabut ini , sudo find . > files_and_folders
, ringkas dan pragmatis, tapi keliru untuk apa saja selain hanya mencetak nama file , untuk alasan keamanan: karena Anda menjalankan sebagai akar pengguna, "Anda berisiko memiliki seluruh sistem Anda menjadi kacau oleh bug di find atau versi jahat, atau doa yang salah yang menulis sesuatu secara tidak terduga, yang tidak dapat terjadi jika Anda menjalankan ini dengan hak istimewa normal "(dari komentar pada jawaban kabut oleh tripleee ).
Solusi ke-2 dalam jawaban viraptor , find . 2>&1 | grep -v 'Permission denied' > some_file
menanggung risiko false positive (karena mengirim campuran stdout dan stderr melalui pipa), dan, berpotensi, alih-alih melaporkan kesalahan yang tidak diterima-ditolak melalui stderr, menangkapnya di samping jalur output dalam file output.
find . 2>&1 > files_and_folders | grep -v 'Permission denied' >&2
?{ find . 3>&2 2>&1 1>&3 | grep -v 'Permission denied' >&3; } 3>&2 2>&1
>(...)
adalah spesifik-Bash.find
harus ditekankan dan diiklankan:find
kode keluar itu tidak berguna. Di sini, sangat mungkin tidak nol (dan sia-sia).execute/search
izin mode file untuk 'mencari' direktori (mengambil inode file yang ada).find
melakukan ini untuk turun ke subdirektori (selain memerlukanread
izin untuk mendaftar file dalam direktori). Ini bukan 'bug' atau 'kesalahan porting'.Menggunakan:
Permission denied
Tentu saja ini tidak hanya menyembunyikan kesalahan, tetapi semua pesan kesalahan.Jika Anda benar-benar ingin menyimpan kemungkinan kesalahan lain, seperti terlalu banyak hop pada symlink, tetapi bukan izin yang ditolak, maka Anda mungkin harus menebak bahwa Anda tidak memiliki banyak file yang disebut 'izin ditolak' dan coba:
Jika Anda benar-benar ingin memfilter hanya kesalahan standar, Anda dapat menggunakan konstruksi yang lebih rumit:
I / O redirection pada
find
perintah:2>&1 > files_and_folders |
. Pipa mengarahkan output standar kegrep
perintah dan diterapkan terlebih dahulu. The2>&1
mengirim standard error ke tempat yang sama sebagai output standar (pipa). The> files_and_folders
mengirimkan output standar (tapi kesalahan tidak standar) ke sebuah file. Hasil akhirnya adalah bahwa pesan yang ditulis dengan kesalahan standar dikirim ke pipa dan output regulerfind
ditulis ke file. Thegrep
menyaring output standar (Anda dapat memutuskan bagaimana selektif Anda inginkan, dan mungkin harus mengubah ejaan tergantung pada lokal dan O / S) dan final>&2
berarti pesan kesalahan yang bertahan (ditulis ke output standar) sekali lagi ke kesalahan standar. Pengalihan akhir dapat dianggap sebagai opsional di terminal, tetapi akan menjadi ide yang sangat bagus untuk menggunakannya dalam skrip sehingga pesan kesalahan muncul pada kesalahan standar.Ada variasi tanpa akhir pada tema ini, tergantung pada apa yang ingin Anda lakukan. Ini akan bekerja pada varian Unix apa pun dengan turunan shell Bourne (Bash, Korn, ...) dan semua versi yang sesuai dengan POSIX
find
.Jika Anda ingin beradaptasi dengan versi spesifik yang
find
Anda miliki di sistem Anda, mungkin ada opsi alternatif yang tersedia. GNUfind
khususnya memiliki banyak sekali opsi yang tidak tersedia di versi lain - lihat jawaban yang saat ini diterima untuk satu set opsi tersebut.sumber
2>/dev/null
, tanpa ruang!2>
adalah unit tunggal tanpa spasi; Anda dapat memiliki ruang di antara itu dan nama file. Demikian pula dengan pengalihan lainnya, seperti2>&1
(yang mengarahkan kesalahan standar ke tempat yang sama dengan keluaran standar), atau2>&-
yang menutup kesalahan standar, dll. Lihat Pengalihan untuk detail berdarah yang tersisa. (Kode di atas adalah shell mirip POSIX generik, tidak khusus untukbash
.)Menggunakan:
atau lebih umum
Bekerja dengan: find (GNU findutils) 4.4.2. Latar Belakang:
-readable
laga uji coba file yang dapat dibaca. The!
Operator mengembalikan benar, ketika tes adalah palsu. Dan! -readable
cocok dengan direktori (& file) yang tidak dapat dibaca.-prune
tindakan tidak turun ke direktori.! -readable -prune
dapat diterjemahkan ke: jika direktori tidak dapat dibaca, jangan turun ke dalamnya.-readable
uji memperhitungkan daftar kontrol akses dan artefak izin lainnya yang-perm
abaikan tes.Lihat juga
find
(1) manual untuk lebih banyak detail.sumber
-o
:find . ! -readable -prune -o -name '*.txt'
find
tidak termasuk-readable
sebagai opsi; begitu jugafind
untuk BSD dan karenanya Mac OS X (saya tidak yakin tentang sistem lain). Jadi, di mana Andafind
dijamin GNU , ini berfungsi dengan baik, tetapi tidak jelas bagaimana mengadaptasi ini jika Anda tidak dapat menjamin bahwa sistem telahfind
menginstal GNU . (Ini akan bekerja dengan baik di Linux; itu mungkin atau mungkin tidak bekerja di tempat lain.)find . ! -readable -prune -o -name '*.txt'
tampaknya tidak berfungsi di Ubuntu 14.04 menggunakan find 4.2.2. Tampaknya untuk menelan-name
. Untuk beberapa alasan aneh saya sukses denganfind . \( ! -readable -prune \) -o -name '*.txt' -print
Jika Anda ingin memulai pencarian dari root "/", Anda mungkin akan melihat output seperti:
Itu karena izin. Untuk mengatasi ini:
Anda dapat menggunakan perintah sudo:
Ia meminta kata sandi pengguna super, ketika memasukkan kata sandi Anda akan melihat hasil apa yang Anda inginkan. Jika Anda tidak memiliki izin untuk menggunakan perintah sudo yang berarti Anda tidak memiliki kata sandi pengguna super, pertama-tama minta admin sistem untuk menambahkan Anda ke file sudoers.
Anda dapat menggunakan redirect Output Kesalahan Standar dari (Umumnya Tampilan / Layar) ke beberapa file dan menghindari melihat pesan kesalahan di layar! redirect ke file khusus / dev / null:
Anda dapat menggunakan redirect Output Kesalahan Standar dari (Umumnya Tampilan / Layar) ke Output standar (Umumnya Tampilan / Layar), kemudian pipa dengan perintah grep dengan -v "invert" parameter untuk tidak melihat garis output yang memiliki 'Izin ditolak' pasangan kata:
sumber
sudo find...
Saya harus menggunakan:
menentukan nama apa yang ingin saya temukan dan kemudian mengatakannya untuk mengalihkan semua kesalahan ke / dev / null
berharap menjadi lokasi program ekspektasi yang saya cari.
sumber
expect
. Sebaliknya,expect
hanya nama file yang akan dicari perintah ini.Pipa
stderr
ke/dev/null
dengan menggunakan 2> / dev / nullfind . -name '...' 2>/dev/null
sumber
find . -name '...' -print 2>/dev/null
Anda juga dapat menggunakan
-perm
dan-prune
predikat untuk menghindari turun ke direktori yang tidak dapat dibaca (lihat juga Bagaimana cara menghapus pernyataan cetakan "izin ditolak" dari program find? - Unix & Linux Stack Exchange ):sumber
-perm -g+r,u+r,o+r
hanya cocok dengan file yang memilikir
izin (baca) yang ditetapkan untuk ketiga prinsip keamanan file , yang tidak memiliki hubungan langsung dengan apakah pengguna saat ini dapat membaca file itu atau tidak. Ini memiliki potensi untuk kehilangan file yang pengguna saat ini dapat membaca dan untuk mencocokkan file yang mereka tidak bisa.find . -type d ! \( -perm -u+r -o -perm -g+r -o -perm -o+r \) -prune -o -print
akan menjadi solusi yang baik.-readable
dengan-perm
- lihat komentar saya sebelumnya dan pertimbangkan contoh ini:echo 'hi' > file; sudo chown nobody:nobody file; sudo chmod o-r file; find file -perm -u=r
mencetakfile
, karena bit baca penggunanya diatur, tetapi ini berhubungan dengannobody
pengguna, bukan pengguna saat ini. Pengguna saat ini tidak dapat membaca file ini; cobacat file
. Lihat juga: jawaban saya ini.Arahkan ulang kesalahan standar. Misalnya, jika Anda menggunakan bash pada mesin unix, Anda dapat mengarahkan kesalahan standar ke / dev / null seperti ini:
sumber
Meskipun pendekatan di atas tidak membahas kasus untuk Mac OS X karena Mac Os X tidak mendukung
-readable
sakelar, ini adalah cara Anda dapat menghindari kesalahan 'Izin ditolak' di output Anda. Ini mungkin membantu seseorang.find / -type f -name "your_pattern" 2>/dev/null
.Jika Anda menggunakan perintah lain dengan
find
, misalnya, untuk menemukan ukuran file dari pola tertentu dalam direktori2>/dev/null
masih akan berfungsi seperti yang ditunjukkan di bawah ini.find . -type f -name "your_pattern" -exec du -ch {} + 2>/dev/null | grep total$
.Ini akan mengembalikan ukuran total file dari pola yang diberikan. Catat
2>/dev/null
pada akhir perintah find.sumber
2>/dev/null
. Bisakah Anda jelaskan bagiannya-exec du -ch {} + 2>/dev/null | grep total$
.-exec
opsi untuk mengambil tindakan lebih lanjut pada file atau direktori yang ditemukan olehfind
perintah.du -ch file_pattern
menghitung ukuran setiap pencocokan filefile_pattern
dan baris terakhir dari output itu adalah total keseluruhan dari semua file yang cocok denganfile_pattern
. Lihat halaman manual untukdu
.grep total
cukup filter baris yang mengekstrak total keseluruhan (yang merupakan baris terakhir).Kesalahan itu dicetak ke output kesalahan standar (fd 2). Untuk memfilternya, cukup arahkan semua kesalahan ke / dev / null:
atau pertama bergabung dengan stderr dan stdout dan kemudian singkirkan kesalahan spesifik tersebut:
sumber
Jawaban sederhana:
find . > files_and_folders 2>&-
2>&-
menutup (-
) deskriptor file kesalahan standar (2
) sehingga semua pesan kesalahan dibungkam.1
jika adaPermission denied
kesalahan ' ' jika tidak akan dicetakJawaban yang kuat untuk GNU
find
:find . -type d \! \( -readable -executable \) -prune -print -o -print > files_and_folders
Berikan opsi tambahan untuk
find
itu-prune
(mencegah turun ke) tetapi masih-print
ada direktori ( ) yang tidak ( ) memiliki keduanya dan izin, atau ( ) file lain.-type
d
\!
-readable
-executable
-o
-print
-readable
dan-executable
opsi adalah ekstensi GNU, bukan bagian dari standar POSIXPermission denied
' pada file yang tidak normal / rusak (mis., Lihat laporan bug yang memengaruhi sistem file yang dipasang di wadah menggunakanlxcfs
<v2.0.5)Jawaban kuat yang bekerja dengan semua yang kompatibel dengan POSIX
find
(GNU, OSX / BSD, dll){ LC_ALL=C find . 3>&2 2>&1 1>&3 > files_and_folders | grep -v 'Permission denied'; [ $? = 1 ]; } 3>&2 2>&1
Gunakan pipa untuk melewatkan aliran kesalahan standar
grep
, menghapus semua baris yang mengandung'Permission denied'
string.LC_ALL=C
mengatur lokal POSIX menggunakan variabel lingkungan ,3>&2 2>&1 1>&3
dan3>&2 2>&1
menduplikasi deskriptor file untuk menyalurkan aliran kesalahan standargrep
, dan[ $? = 1 ]
menggunakan[]
untuk membalikkan kode kesalahan yang dikembalikan olehgrep
untuk memperkirakan perilaku aslifind
.'Permission denied'
kesalahan apa pun karena pengalihan output (mis., Jikafiles_and_folders
file itu sendiri tidak dapat ditulisi)sumber
-perm
solusi berbasis tidak layak presentasi, karena lebih mendasar daripada kutipan menyarankan melakukan sesuatu yang berbeda daripada yang dimaksudkan: itu adalah murni berkas-sentris tes, yang berkaitan dengan file pemilik dan grup, yang keduanya tidak memiliki hubungan yang dijamin dengan pengguna yang memanggil perintah (lihat jawaban saya ini. Sepertinya solusi GNU Anda yang direvisi sekarang tidak menangkap izin yang ditolak kesalahan yang berasal dari file .echo 'hi' > file; sudo chown nobody:nobody file; sudo chmod o-r file; find file -perm -u=r
cetakanfile
, karena bit yang dibaca pengguna disetel, tetapi ini berkaitan dengannobody
pengguna , bukan pengguna saat ini. Pengguna saat ini tidak dapat membaca file ini; cobacat file
.-perm
tidak bekerja untuk menentukan izin pengguna saat ini. Menghapus alternatif itu dari jawaban ini.Untuk menghindari hanya izin yang ditolak peringatannya, beri tahu find untuk mengabaikan file yang tidak dapat dibaca dengan memangkasnya dari pencarian. Tambahkan ekspresi sebagai ATAU ke penemuan Anda, seperti
Ini sebagian besar mengatakan untuk (mencocokkan file yang tidak dapat dibaca dan memangkasnya dari daftar) ATAU (cocokkan nama seperti * .jbd dan menampilkannya [dengan ls]) . (Ingatlah bahwa secara default ekspresi adalah AND'd bersama kecuali jika Anda menggunakan -atau) Anda memerlukan -l dalam ekspresi kedua atau jika ditemukan dapat menambahkan tindakan default untuk menunjukkan kecocokan, yang juga akan menunjukkan kepada Anda semua file yang tidak dapat dibaca .
Tetapi jika Anda mencari file nyata di sistem Anda, biasanya tidak ada alasan untuk mencari / dev, yang memiliki banyak file, jadi Anda harus menambahkan ekspresi yang mengecualikan direktori itu, seperti:
Jadi (cocokkan file yang tidak dapat dibaca dan pangkas dari daftar) ATAU (cocokkan jalur / dev dan pangkas dari daftar) ATAU (cocokkan file seperti * .jbd dan tampilkan) .
sumber
menggunakan
Ini bodoh (karena Anda meningkatkan pencarian) dan tidak aman, tetapi jauh lebih pendek untuk menulis.
sumber
sudo
. Anda berisiko seluruh sistem Anda dikacaukan oleh bug difind
atau versi jahat, atau doa yang salah yang menulis sesuatu secara tidak terduga, yang tidak dapat terjadi jika Anda menjalankan ini dengan hak-hak istimewa yang normal.Tidak ada jawaban di atas yang berfungsi untuk saya. Apa pun yang saya temukan di Internet berfokus pada: sembunyikan kesalahan. Tidak ada yang menangani proses kode-kembali / kode-keluar dengan benar. Saya menggunakan perintah find dalam skrip bash untuk menemukan beberapa direktori dan kemudian memeriksa isinya. Saya mengevaluasi perintah temukan sukses menggunakan kode keluar: nilai nol berfungsi, jika tidak gagal.
The jawaban yang diberikan di atas oleh Michael Brux bekerja kadang-kadang. Tapi saya punya satu skenario di mana ia gagal! Saya menemukan masalah dan memperbaikinya sendiri. Saya perlu memangkas file ketika:
Lihat masalah utama di sini adalah: DAN / ATAU. Satu urutan kondisi yang disarankan yang saya baca adalah:
Ini tidak selalu berhasil. Ini berarti pemangkasan dipicu ketika pertandingan adalah:
Urutan ekspresi ini gagal ketika akses baca diberikan tetapi tidak ada akses eksekusi.
Setelah beberapa pengujian saya menyadari tentang itu dan mengubah solusi skrip shell saya ke:
Kuncinya di sini adalah menempatkan "tidak benar" untuk ekspresi gabungan:
Kalau tidak, ia tidak memiliki akses penuh, yang berarti: memangkasnya. Ini terbukti bekerja untuk saya dalam satu skenario yang gagal solusi yang disarankan sebelumnya.
Saya memberikan rincian teknis di bawah ini untuk pertanyaan di bagian komentar. Saya minta maaf jika detailnya berlebihan.
sumber
nice
danfind $HOME -maxdepth 5 -follow ...
?${m_find_name}
), dan berisi beberapa pilihan tidak relevan dengan pertanyaan (nice
,/home*
,-maxdepth 5
,-follow
). Saya telah menambahkan jawaban yang membahas masalah khusus 'memfilter direktori yang dapat dibaca tetapi tidak dapat dieksekusi' secara lebih ringkas, namun tetap memiliki tujuan umum.Anda dapat menggunakan grep -v invert-match
seperti ini:
Haruskah dengan keajaiban
sumber
- = Untuk MacOS = -
Buat perintah baru menggunakan alias: tambahkan saja baris ~ / .bash_profile:
dan di jendela Terminal baru Anda bisa menyebutnya:
sumber
Jika Anda menggunakan CSH atau TCSH, berikut ini solusinya:
Jika Anda ingin output ke terminal:
Namun, seperti yang dijelaskan oleh FAQ "csh-whynot", Anda sebaiknya tidak menggunakan CSH.
sumber