查找当前目录中的所有可写文件

时间:2010-03-22 12:01:33

标签: linux bash file

我想快速识别目录中的所有可写文件。快速的方法是什么?

11 个答案:

答案 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