Tôi muốn nhanh chóng xác định tất cả các tệp có thể ghi trong thư mục. Cách nhanh chóng để làm điều đó là gì?Tìm tất cả các tệp có thể ghi trong thư mục hiện tại
Trả lời
find -type f -maxdepth 1 -writable
-f
sẽ kiểm tra cho một tập tin
-w
sẽ kiểm tra xem nó có khả năng ghi
Ví dụ:
$ for f in *; do [ -f $f ] && [ -w $f ] && echo $f; done
Nếu bạn đang ở trong vỏ sử dụng
find . -maxdepth 1 -type f -writable
thấy người đàn ông tìm
Bạn sẽ tìm thấy câu trả lời tốt hơn cho loại câu hỏi này trên superuser.com hoặc serverfault.com
Nếu bạn đang viết mã không chỉ sử dụng trình bao, bạn có thể quan tâm đến (2) gọi hệ thống.
này question đã được hỏi về serverfault
EDIT: @ ghostdog74 hỏi nếu bạn loại bỏ quyền ghi cho tập tin này nếu điều này vẫn sẽ tìm thấy những tập tin. Câu trả lời, không có điều này chỉ tìm thấy các tập tin có thể ghi được.
[email protected] ~/temp
$ cd temp
[email protected] ~/temp/temp
$ ls
[email protected] ~/temp/temp
$ touch newfile
[email protected] ~/temp/temp
$ ls -alph
total 0
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../
-rw-r--r-- 1 dwaters Domain Users 0 Mar 22 13:27 newfile
[email protected] ~/temp/temp
$ find . -maxdepth 1 -type f -writable
./newfile
[email protected] ~/temp/temp
$ chmod 000 newfile
[email protected] ~/temp/temp
$ ls -alph
total 0
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../
---------- 1 dwaters Domain Users 0 Mar 22 13:27 newfile
[email protected] ~/temp/temp
$ find . -maxdepth 1 -type f -writable
[email protected] ~/temp/temp
Tôi thấy lỗi sau với giải pháp của bạn: tìm: vị từ không hợp lệ '-writable ' – vehomzzz
xin lỗi. ở vị trí sai, cố định ngay bây giờ, hãy xem người đàn ông tìm thấy cách sử dụng lệnh này –
nếu bạn xóa tất cả quyền ghi vào một tệp và sau đó sử dụng lệnh, nó vẫn tìm thấy tệp? Tôi tò mò – ghostdog74
for var in `ls`
do
if [ -f $var -a -w $var ]
then
echo "$var having write permission";
else
echo "$var not having write permission";
fi
done
không sử dụng ls với vòng lặp để phân tích tên tệp. cũng trích dẫn các biến của bạn trong bài kiểm tra if/else. – ghostdog74
để tìm các file có thể ghi bất kể chủ sở hữu, nhóm hoặc người khác, bạn có thể kiểm tra w
cờ trong cột phép tập tin của ls.
ls -l | awk '$1 ~ /^.*w.*/'
$ 1 là trường đầu tiên, (tức là khối quyền của ls -l), cụm từ thông dụng chỉ tìm chữ "w" trong trường một. đó là tất cả.
nếu bạn muốn tìm chủ sở hữu quyền ghi
ls -l | awk '$1 ~ /^..w/'
nếu bạn muốn tìm nhóm quyền ghi
ls -l | awk '$1 ~ /^.....w/'
nếu bạn muốn tìm những người khác viết phép
ls -l | awk '$1 ~ /w.$/'
thật tuyệt vời! ypu có thể giải thích pelase lệnh awk này – vehomzzz
dấu ngã có nghĩa là gì? – vehomzzz
dấu ngã là toán tử regex của awk cho "trận đấu". giống như toán tử '= ~' regex của Perl – ghostdog74
Các Tùy chọn -writable
sẽ tìm các tệp có thể ghi bởi người dùng hiện tại.Nếu bạn muốn tìm file mà vẫn được phép viết bởi bất cứ ai (hoặc thậm chí kết hợp khác), bạn có thể sử dụng tùy chọn -perm
:
find -maxdepth 1 -type f -perm /222
này sẽ tìm thấy file đó vẫn được phép của chủ sở hữu của họ (bất cứ ai có thể được) :
find -maxdepth 1 -type f -perm /200
nhân vật khác nhau có thể được sử dụng để kiểm soát được ý nghĩa của các đối số chế độ:
/
- bất kỳ sự cho phép chút-
- tất cả các bit (-222
có nghĩa là tất cả - người dùng, nhóm và khác)- no prefix - đặc điểm kỹ thuật chính xác (
222
có nghĩa là không có permssions khác hơn là ghi)
Đó là một giải pháp rất thanh lịch. Làm cách nào để sửa đổi điều này để tìm tệp chỉ có thể ghi bởi chủ sở hữu. – kshenoy
@kshenoy: Một cách: '-perm -u + w! -perm -g + w! -perm -o + w' –
Trên máy Mac hoặc bất kỳ phiên bản Linux cũ nào khác, sử dụng: find-type f + perm 222 – user1959190
stat -c "%A->%n" *| sed -n '/^.*w.*/p'
Vấn đề với find -writable
là rằng nó không di động và nó không dễ dàng để mô phỏng chính xác với các toán tử di động find
. Nếu phiên bản của find
không có nó, bạn có thể sử dụng touch
để kiểm tra xem các tập tin có thể được ghi vào, sử dụng -r
để chắc chắn rằng bạn (hầu như) không sửa đổi các tập tin:
find . -type f | while read f; do touch -r "$f" "$f" && echo "File $f is writable"; done
Các -r
tùy chọn cho touch
là trong POSIX, vì vậy nó có thể được coi là di động. Tất nhiên, điều này sẽ kém hiệu quả hơn nhiều so với find -writable
.
Lưu ý rằng touch -r
sẽ cập nhật mỗi tập tin ctime (thời gian của sự thay đổi cuối cùng để meta-data của nó), nhưng người ta ít khi quan tâm đến ctime anyway.
Bạn đã thử 'chạm' trên một tệp chỉ đọc dưới dạng gốc hoặc trên tệp mà bạn sở hữu? Khả năng cập nhật dấu thời gian không ngụ ý rằng tệp có thể ghi được. –
Nếu bạn là người chủ, các tệp chỉ đọc trên các hệ thống tệp có thể ghi được có thể ghi, vì vậy tôi không thấy sự cố ở đó. – Idelic
Trên redhat 4 tôi nhận được "while: Expression Syntax." – jgritty
Nếu bạn muốn tìm tất cả các file được ghi bởi etal apache sau đó bạn có thể làm điều này:
sudo su www-data
find . -writable 2>/dev/null
Thay www-data với ai hoặc apache hoặc bất cứ người sử dụng web của bạn.
Tôi biết điều này là một chủ đề rất cũ, tuy nhiên ...
Lệnh dưới đây đã giúp tôi: find . -type f -perm /+w
Bạn có thể sử dụng -maxdepth dựa trên bao nhiêu mức dưới thư mục mà bạn muốn tìm kiếm. Tôi đang sử dụng Linux 2.6.18-371.4.1.el5.
- 1. Tìm tệp trong tất cả các thư mục có thể?
- 2. CoffeeScript - biên dịch tất cả các tệp .coffee trong thư mục hiện tại và tất cả các thư mục con
- 3. Cách tìm tất cả các tệp có thư mục mẹ cụ thể trong linux?
- 4. Cách gzip tất cả các tệp trong tất cả các thư mục con trong bash
- 5. grep trong tất cả các thư mục
- 6. Điều gì mở rộng cho tất cả các tệp trong thư mục hiện tại đệ quy?
- 7. Cách nén tất cả các tệp trong thư mục
- 8. Làm cách nào để tìm tất cả các tệp trong Thư mục có grep và regex?
- 9. Trích xuất tất cả các tệp có đường dẫn thư mục trong thư mục đã cho
- 10. Liệt kê tất cả các tệp và thư mục trong thư mục + thư mục con
- 11. Mở tất cả các tệp trong một thư mục
- 12. Tìm tất cả các tập tin trong thư mục không phải là thư mục tự
- 13. Liệt kê tất cả các thư mục trong thư mục
- 14. Vòng lặp shell có thể giải nén tất cả các tệp trong một thư mục không?
- 15. Cách tìm tất cả các tệp trong thư mục hiện tại có tên tệp khớp với mẫu nhất định trong python?
- 16. Linux có thể dọn sạch nội dung của tất cả các tệp trong một thư mục
- 17. Cách liệt kê các tệp trong thư mục hiện tại?
- 18. Liệt kê các tệp trên một kích thước cụ thể trong thư mục hiện tại và tất cả các thư mục con
- 19. Java tải xuống tất cả các tệp và thư mục trong một thư mục
- 20. Tìm tất cả các tệp trong thư mục có chuỗi hoặc mẫu trong tên tệp bằng PHP
- 21. cách thực hiện thao tác grep trên tất cả các tệp trong thư mục
- 22. Tìm tất cả các tệp .php trong thư mục đệ quy
- 23. Tìm tất cả các tệp trong một thư mục bằng cách liệt kê
- 24. Mã Python để tìm tất cả các tệp mới được tạo, sửa đổi và xóa trong tất cả các thư mục/thư mục con bắt đầu từ/directory
- 25. Cả ruby lẫn irb đều không thể tải tệp .rb trong thư mục hiện tại
- 26. Tìm tất cả các tệp CSV trong một thư mục bằng cách sử dụng Python
- 27. Tập lệnh Bash để thực hiện lệnh trên tất cả các tệp trong một thư mục
- 28. Trong .NET, hãy kiểm tra xem người dùng hiện tại có thể ghi vào thư mục
- 29. TCL: Tìm kiếm đệ quy các thư mục con để nguồn tất cả các tệp .tcl
- 30. Sử dụng tìm để xóa tất cả các thư mục con (và các tệp của họ)
Nó đưa ra cảnh báo về thứ tự các tùy chọn trên hệ thống của tôi. –
bạn đang sử dụng Linux nào? – matja
+1 cho maxdepth và loại f, tôi đã bao gồm những điều này trong câu trả lời của mình. –