列出具有相同权限的当前目录中的文件

时间:2012-11-06 19:00:44

标签: shell unix

我需要编写一个接受两个或多个参数的Unix shell脚本,一个文件模式,一个命令和一个可选的参数列表,并在具有该给定模式的所有文件上使用可选参数执行给定命令。

例如,mycode 644 ls -l应对当前目录中具有模式644的所有文件执行命令ls -l。

我使用此代码将文件权限更改为数字模式

#!/bin/sh
 mode=$1
 #it adds the numeric permission to the beginning of the line
 ls -l |awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
         *2^(8-i));if(k)printf("%0o ",k);print }'
 .....
 shift $1
 $*

但我不知道如何要求代码只列出具有相同权限的文件。我该怎么问代码呢?

2 个答案:

答案 0 :(得分:2)

使用find命令。 E.g。

find . -maxdepth 1 -perm 644 -exec ls -ld {} \;

答案 1 :(得分:0)

为什么你不能再使用一个像这样的awk。在这里,我将获得644可用的第一列。这样你就不必使用find命令。而不是644,你可以放任何变量&amp;通过所需权限传递参数&amp;根据输入列出这些文件。

ls -l |awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
         *2^(8-i));if(k)printf("%0o ",k);print }' | awk '$1 ~ 644'