以下是我的代码:
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
它工作但它只在当前目录中找到文件。
有人告诉我,我需要使用某种递归方法来遍历所有子目录,但我不知道该怎么做。
所以,如果有人能帮助我,我将非常感激。
谢谢!
答案 0 :(得分:1)
您可以使用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
表示每个文件都设置了用户,组或其他写入权限。
答案 1 :(得分:1)
您的脚本的作用是查找当前工作目录下的非目录且可写入当前用户的文件。这可以通过以下命令实现:
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
谓词(added to v.4.3 in 2005),那么您只能拥有文件权限。然后你必须明确你在特定上下文中的“可写”是什么意思(可写给谁?),你可以用{gregb&#39中描述的-writable
谓词替换-perm
谓词的答案。如果您认为自己的意思是“可由任何人编写”,则可以使用-perm /u=w,g=w,o=w
或-perm /222
,但实际上只有使用权限才能获得-writable
的所有好处。另请注意,+
对-perm
的权限测试形式已弃用,不应再使用;应该使用/
表格。