[英]LINUX - shell script finding and listing all files with rights to write in directory tree
这是我到目前为止的代码:
echo $(pwd > adress)
var=$(head -1 adress)
rm adress
found=0 #Flag
fileshow()
{
cd $1
for i in *
do
if [ -d $i ]
then
continue
elif [ -w $i ]
then
echo $i
found=1
fi
done
cd ..
}
fileshow $1
if [ $found -eq 0 ]
then
clear
echo "$(tput setaf 1)There arent any executable files !!!$(tput sgr0)"
fi
它可以工作,但是只能在当前目录中找到文件。
有人告诉我,我需要使用某种递归方法来遍历所有子目录,但是我不知道该怎么做。
因此,如果有人可以帮助我,我将非常感激。
谢谢!
您可以使用find
:
find /path/to/directory/ -type f -perm -o=w
-o=w
表示每个文件都设置了“其他写权限”。
要么,
find /path/to/directory/ -type f -perm /u+w,g+w,o+w
/u+w,g+w,o+w
表示每个文件都具有用户,组或其他写权限集。
脚本的作用是在当前工作目录下查找不是目录且可写给当前用户的文件。 这可以通过以下命令来实现:
find ./ -type f -writable
使用-type f
的优点是,如果您需要的话,它也排除符号链接和其他特殊类型的文件。 如果要使用所有非目录文件(如脚本建议),则可以使用:
find ./ ! -type d -writable
如果要对这些文件进行排序 (添加的问题,假定字典顺序为升序),则可以使用sort
:
find ./ -type f -writable | sort
如果您想将这些排序的文件名用于其他用途,则将采用规范模式(以处理带有嵌入式换行符和其他很少使用的字符的文件名):
while read -r -d $'\0'; do
echo "File '$REPLY' is an ordinary file and is writable"
done < <(find ./ -type f -writable -print0 | sort -z)
如果您使用的find
版本非常旧,但不支持方便的可-writable
谓词( 2005年添加到v.4.3中 ),则您仅具有继续进行文件操作的权限。 然后,您必须清楚在特定上下文中(可-writable
谁?)“可写”的含义,然后可以用@gregb答案中所述的-perm
谓词替换-writable
谓词。 如果您确定您的意思是“任何人都可写”,则可以使用-perm /u=w,g=w,o=w
或-perm /222
,但是实际上没有办法仅使用权限来获得-writable
所有好处。 。 另请注意,不赞成使用-perm
的+
形式的权限测试,并且不应再使用; /
形式应改为使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.