我需要编写一个接受两个或多个参数的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
$*
但我不知道如何要求代码只列出具有相同权限的文件。我该怎么问代码呢?
答案 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'