我正在练习unix find
命令并根据权限进行过滤。这就是我的练习目录上ls -al
的样子:
[tom@t-degroot1 ~]$ ls -al
total 44
drwx------. 8 tom tom 4096 Dec 13 09:08 .
drwxr-xr-x. 7 root root 63 Nov 5 16:38 ..
-rw-------. 1 tom tom 9547 Dec 15 08:16 .bash_history
-rw-r--r--. 1 tom tom 18 Oct 26 00:36 .bash_logout
-rw-r--r--. 1 tom tom 193 Oct 26 00:36 .bash_profile
-rw-r--r--. 1 tom tom 231 Oct 26 00:36 .bashrc
drwxrwxr-x. 2 tom tom 21 Dec 12 22:14 chattrdir
-rw-rw-r--. 1 tom tom 0 Dec 13 09:03 file1
-rw-rw-r--. 1 tom tom 0 Dec 13 09:03 file2
drwxr-xr-x. 2 tom tom 4096 Dec 11 14:36 fileext
-rw-------. 1 tom tom 164 Dec 14 09:25 .lesshst
drwxr-xr-x. 4 tom tom 37 Dec 20 2015 .mozilla
drwxrw----. 3 tom tom 18 Dec 8 20:20 .pki
drwx------. 2 tom tom 24 Nov 7 09:51 .ssh
-rw-------. 1 tom tom 3639 Dec 8 20:56 .viminfo
drwxrwxr-x. 2 tom tom 4096 Dec 8 21:26 wildcard
我根据权限执行find命令搜索:
[tom@t-degroot1 ~]$ find . -maxdepth 1 -perm /004
./.bash_logout
./.bash_profile
./.bashrc
./.mozilla
./chattrdir
./file1
./file2
./fileext
./wildcard
接下来看看这些是否确实是唯一为“其他”设置了读取权限位的文件,我将输出传递给ls
:
[tom@t-degroot1 ~]$ find . -maxdepth 1 -perm /o+r | ls -al
total 44
drwx------. 8 tom tom 4096 Dec 13 09:08 .
drwxr-xr-x. 7 root root 63 Nov 5 16:38 ..
-rw-------. 1 tom tom 9584 Dec 15 08:23 .bash_history
-rw-r--r--. 1 tom tom 18 Oct 26 00:36 .bash_logout
-rw-r--r--. 1 tom tom 193 Oct 26 00:36 .bash_profile
-rw-r--r--. 1 tom tom 231 Oct 26 00:36 .bashrc
drwxrwxr-x. 2 tom tom 21 Dec 12 22:14 chattrdir
-rw-rw-r--. 1 tom tom 0 Dec 13 09:03 file1
-rw-rw-r--. 1 tom tom 0 Dec 13 09:03 file2
drwxr-xr-x. 2 tom tom 4096 Dec 11 14:36 fileext
-rw-------. 1 tom tom 164 Dec 14 09:25 .lesshst
drwxr-xr-x. 4 tom tom 37 Dec 20 2015 .mozilla
drwxrw----. 3 tom tom 18 Dec 8 20:20 .pki
drwx------. 2 tom tom 24 Nov 7 09:51 .ssh
-rw-------. 1 tom tom 3639 Dec 8 20:56 .viminfo
drwxrwxr-x. 2 tom tom 4096 Dec 8 21:26 wildcard
您会看到以下文件不为其他人设置了读取权限,即使我只想要为其他人设置读取权限位的文件:
-rw-------. 1 tom tom 9584 Dec 15 08:23 .bash_history
rw-------. 1 tom tom 164 Dec 14 09:25 .lesshst
drwxrw----. 3 tom tom 18 Dec 8 20:20 .pki
drwx------. 2 tom tom 24 Nov 7 09:51 .ssh
-rw-------. 1 tom tom 3639 Dec 8 20:56 .viminfo
这些文件怎么可能出现在输出中?我只根据我的查找搜索将可读的文件传输到ls
命令,ls
显示它们不可读。
答案 0 :(得分:1)
ls
没有从stdin读取文件名。它期望它们在命令行上。你想要:
find . -maxdepth 1 -perm /o+r -exec ls {} \;
检查man find
以获取exec命令的{} \;
语法。
顺便说一句,如果你的find
支持,你可能想要:
find . -maxdepth 1 -perm /o+r -exec ls {} +