0

我需要编写一个接受两个或多个参数、一个文件模式、一个命令和一个可选参数列表的 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
 $*

但我不知道如何让代码只列出具有相同权限的文件。我怎样才能要求代码做到这一点?

4

2 回答 2

2

find为此使用命令。例如

find . -maxdepth 1 -perm 644 -exec ls -ld {} \;
于 2012-11-06T19:08:54.643 回答
0

你为什么不能再像这样使用一个awk。在这里,我将采用 644 可用的第一列。这样您就不必使用 find 命令。您可以放置​​任何变量并传递具有所需权限的参数并根据输入列出这些文件,而不是 644。

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'
于 2015-08-12T06:01:49.180 回答