Ubuntu grep, tìm vv: Giấy phép bị từ chối và không có tập tin hoặc thư mục như vậy


17

Khi tôi sử dụng grephoặc find, tôi luôn cảm thấy khó chịu bởi các thông báo "Quyền bị từ chối" và "Không có tệp hoặc thư mục như vậy", đại loại như thế này:

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn
grep: ./lib/ufw/user6.rules: Permission denied
grep: ./lib/ufw/user.rules: Permission denied
grep: ./lib/init/rw/udev/watch/27: No such file or directory
grep: ./lib/init/rw/udev/watch/26: No such file or directory
grep: ./lib/init/rw/udev/watch/25: No such file or directory

Làm cách nào tôi có thể tránh chúng và làm cho nó để tôi chỉ nhìn thấy dữ liệu liên quan, tức là thứ gì đó mà tôi thực sự đang tìm kiếm?


Câu trả lời:


24

với grep bạn có thể chỉ định cờ -s làm gần như những gì @ortang nói

-s, --no-message Bỏ qua các thông báo lỗi về các tệp không tồn tại hoặc không thể đọc được. Lưu ý về tính di động: không giống như GNU grep, Unix grep phiên bản thứ 7 không tuân thủ POSIX, vì nó thiếu -q và tùy chọn -s của nó hoạt động giống như tùy chọn -q của GNU grep. Grep kiểu USG cũng thiếu -q nhưng tùy chọn -s của nó hoạt động giống như GNU grep. Các kịch bản shell di động nên tránh cả -q và -s và nên chuyển hướng đầu ra tiêu chuẩn và lỗi thành / dev / null.

với tìm theo như tôi biết câu trả lời @ortangs là tốt nhất. cái gì đó như

find / -name "myfile" -type f -print 2>/dev/null


6

Hãy thử chuyển hướng stderrđến /dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

5

Chuyển hướng strerrđến /dev/null(akablack hole ) là một cách tốt để loại bỏ các lỗi bị từ chối cấp phép.

Tuy nhiên, lưu ý rằng vết thương này không chỉ chặn permission deniedcác tin nhắn mà TẤT CẢ các thông báo lỗi.

Nếu bạn muốn giữ lại các thông báo lỗi khác permission deniedthì bạn có thể làm một cái gì đó như thế này -

grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log

Nếu bạn không muốn giữ lại những thứ đó thì những điều sau đây sẽ ổn thôi -

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

1
Bạn không thể grep một cái gì đó đã được chuyển hướng đến / dev / null.
choroba

@choroba Đã sửa câu trả lời. Đồng nghĩa với việc viết 2>&1thay vì 2> /dev/nullcho gợi ý đầu tiên.
jaypal singh

Vâng, bạn phải chuyển hướng stderrđến stoutđầu tiên.
ortang

3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

Sử dụng sudolệnh để nâng cao lệnh để có đặc quyền quản trị.


0

Sử dụng "| &" trước khi grep -v sẽ xử lý nó, vd

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.