我想快速识别目录中的所有可写文件。快速的方法是什么?
答案 0 :(得分:33)
find -type f -maxdepth 1 -writable
答案 1 :(得分:16)
-writable
选项将查找当前用户可写的文件。如果您想查找任何人(甚至其他组合)可写的文件,您可以使用-perm
选项:
find -maxdepth 1 -type f -perm /222
这将找到其所有者(无论是谁)可写的文件:
find -maxdepth 1 -type f -perm /200
可以使用各种字符来控制mode参数的含义:
/
- 任何权限位-
- 所有位(-222
都意味着所有用户,群组和其他位置)222
意味着除写之外没有任何权利)答案 2 :(得分:4)
要查找可写文件而不管所有者,组或其他人,您可以检查ls的文件权限列中的w
标志。
ls -l | awk '$1 ~ /^.*w.*/'
$ 1是第一个字段,(即ls -l的权限块),正则表达式只是在字段1中找到字母“w”。就是这样。
如果您想查找所有者写入权限
ls -l | awk '$1 ~ /^..w/'
如果要查找群组写入权限
ls -l | awk '$1 ~ /^.....w/'
如果你想找别人的写权限
ls -l | awk '$1 ~ /w.$/'
答案 3 :(得分:3)
-f
将测试文件
-w
将测试它是否可写
示例:
$ for f in *; do [ -f $f ] && [ -w $f ] && echo $f; done
答案 4 :(得分:3)
如果您正在使用
find . -maxdepth 1 -type f -writable
见男人找
您会在superuser.com或serverfault.com上找到针对此类问题的更好答案
如果您编写的代码不仅仅是使用shell,您可能会对access(2)系统调用感兴趣。
已在question
上询问此serverfault编辑:@ ghostdog74询问您是否删除了此文件的写入权限,如果仍然可以找到该文件。答案,不,这只能找到可写的文件。
dwaters@eirene ~/temp
$ cd temp
dwaters@eirene ~/temp/temp
$ ls
dwaters@eirene ~/temp/temp
$ touch newfile
dwaters@eirene ~/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
dwaters@eirene ~/temp/temp
$ find . -maxdepth 1 -type f -writable
./newfile
dwaters@eirene ~/temp/temp
$ chmod 000 newfile
dwaters@eirene ~/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
dwaters@eirene ~/temp/temp
$ find . -maxdepth 1 -type f -writable
dwaters@eirene ~/temp/temp
答案 5 :(得分:1)
find -writable
的问题在于它不可移植,并且使用便携式find
运算符进行正确模拟并不容易。如果您的find
版本没有,您可以使用touch
检查是否可以使用-r
写入文件,以确保您(几乎)不会修改文件:
find . -type f | while read f; do touch -r "$f" "$f" && echo "File $f is writable"; done
-r
的{{1}}选项位于POSIX中,因此可以将其视为可移植的。当然,这比touch
效率低得多。
请注意,find -writable
将更新每个文件的 ctime (上次更改其元数据的时间),但无论如何都很少关心ctime。< / p>
答案 6 :(得分:0)
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
答案 7 :(得分:0)
stat -c "%A->%n" *| sed -n '/^.*w.*/p'
答案 8 :(得分:0)
如果要查找apache etal可写的所有文件,则可以执行以下操作:
sudo su www-data
find . -writable 2>/dev/null
将www-data替换为nobody或apache或您的网络用户。
答案 9 :(得分:0)
我知道这是一个很老的话题,但是......
以下命令帮助我:find . -type f -perm /+w
您可以根据要搜索的目录下面的级别使用-maxdepth。 我使用的是Linux 2.6.18-371.4.1.el5。
答案 10 :(得分:0)
查找所有者可写的文件:
find ./ -perm /u+w
按组查找可写文件:
find ./ -perm /g+w
查找任何人都可以写入的文件:
find ./ -perm /o+w
查找具有定义权限的文件:
find ./ -type -d -perm 0777
find ./ -type -d -perm 0755
find ./ -type -f -perm 0666
find ./ -type -f -perm 0644
禁用递归:
-maxdepth 1