shell script - Cách xuất chủ sở hữu của tệp


3

Có một lệnh để xuất chủ sở hữu của một tập tin, và không có gì khác? Tôi cho rằng tôi có thể sử dụng ls và chạy qua sed, nhưng nếu có một cách tốt hơn, tôi chắc chắn sẽ sử dụng nó.


Bạn có cần điều đó thường xuyên hơn? Bạn có thể tạo một tập lệnh perl nhỏ hoặc thậm chí một chương trình c nhỏ để trả về thông tin cụ thể về tên tệp đã cho.
ott--

@ott Tôi có thể ... nhưng đó là ít di động (?). Tôi thích sử dụng các chương trình đã có trên máy tính hơn là phải tự biên dịch.
BenjiWiebe

@BenjiWiebe: Perl có xu hướng rất di động. Bạn có thể sử dụng một cái gì đó như for my $file (@ARGV) {$uid = (stat $file)[4]; $name = (getpwuid $uid)[0]; print "$name\n"} hoặc là print map {"$_\n"} map {(getpwuid $_)[0]} map {(stat $_)[4]} @ARGV (cái nào trông đẹp hơn với bạn)
grawity

@grawity Perl không được cài đặt ở mọi nơi ... nhưng chỉ cho tôi một hệ thống Linux không có statbash / sh Cài đặt.
BenjiWiebe

@BenjiWiebe: Tôi có thể chỉ cho bạn một vài hệ thống BSD sử dụng lựa chọn hoàn toàn khác nhau cho stat.
grawity

Câu trả lời:


6
stat -c %U file.txt

ls là một công cụ để tương tác xem thông tin tập tin. Đầu ra của nó được định dạng cho con người và sẽ gây ra lỗi trong các tập lệnh. Sử dụng globs hoặc là find thay thế . Hiểu tại sao: http://mywiki.wooledge.org/ParsingLs


Cảm ơn rất nhiều. Tôi thích chức năng của jilliagre, nhưng tôi muốn một lệnh để thực hiện nó mà không cần phân tích cú pháp của một lệnh khác.
BenjiWiebe

Ngọt ngào, một lệnh thiết bị đầu cuối mới để chơi với! Tôi chưa bao giờ biết về lệnh stat, nhưng bây giờ tôi sẽ lạm dụng nó theo mọi cách tôi có thể nghĩ ra.
Llamanerds

1

Tôi sẽ sử dụng chức năng đó:

lso() { ls -dl ${1:?usage: lso file} | awk '{print $3;exit}'; }

Chỉnh sửa:

  • tôi nghĩ về stat nhưng tôi cố gắng tránh sử dụng bất cứ thứ gì không chuẩn khi có thể. Tôi đã gắn bó với thứ gì đó di động (tức là POSIX) khi câu hỏi của bạn được gắn thẻ linux unix, không chỉ linux với stat là khá chuẩn ..

  • Vì câu hỏi này đã kích hoạt một cuộc thảo luận về tên người dùng hợp lệ, những điều này cũng được xác định bởi một tiêu chuẩn Unix là một chuỗi bao gồm các ký tự trong danh sách này:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

a b c d e f g h i j k l m n o p q r s t u v w x y z

0 1 2 3 4 5 6 7 8 9. _ -

với các hạn chế bổ sung cho dấu gạch nối không phải là ký tự đầu tiên.

Tôi cho rằng không có không gian được cho phép. Cũng giống như bất kỳ thứ gì khác không di động, điều này có thể dẫn đến kết quả không mong muốn không chỉ với chức năng nhỏ của tôi mà còn với nhiều tiện ích CLI Unix / Linux.


2
Có thể hoạt động tuyệt vời cho đến khi bạn có tên người dùng có lẽ có một khoảng trống trong đó ...
a CVn

1
@ MichaelKjorling trên Fedora 17: sudo adduser "foo bar" đầu ra adduser: invalid user name 'foo bar' nhưng nó hoạt động tốt nếu bạn thử "foobar" (không có dấu cách). Do đó, không gian không hợp lệ trong tên người dùng.
BenjiWiebe

Nó thậm chí còn chỉ định Linux ở đâu? Tôi thấy một unix cũng như ...
a CVn

@ MichaelKjorling Tiêu đề bắt đầu "linux - shell script -...". Và dĩ nhiên, có thẻ linux.
BenjiWiebe

1
@BenjiWiebe: Không gian hợp lệ trong tên người dùng, bất kể những gì adduser nói về họ. Trên thực tế, chúng thường được sử dụng trên các hệ thống Linux được nối với các miền MS Active Directory.
grawity
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.