我正在做一项家庭作业,它检查目录中所有文件的用户权限。我想在一列中输出所有文件名,在一列或多列中输出权限。任何帮助,将不胜感激。
#!/bin/bash
clear
bold=$(tput bold)
normal=$(tput sgr0)
red=`tput setaf 1`
reset=`tput sgr0`
DIR1=$1
cd $1
num=0
for file in *; do
echo ${bold}$file${normal}
if [ -r $file ]
then
echo ${red}"r"${reset} ;
fi
if [ -w $file ]
then
echo ${red}"w"${reset};
fi
if [ -x $file ]
then
echo ${red}"x"${reset};
fi
# ls -l $file | awk '{print $1 }
#ls -1 $file | awk '{print $1 }
(( num+=1 ))
# echo $num
done
echo
echo
if [ $1 ]
then
echo $num files in specified directory '('`pwd`')'
else
echo $num files in directory '('`pwd`')'
echo
fi
echo
echo
答案 0 :(得分:0)
我想在一列中输出所有文件名,在一列或多列中输出权限。
这样的事可能会这样做:
stat -c "%A %n" *
如果您首先选择文件名,请更改stat
的输出:
stat -c "%n %A" *
如果您希望将输出作为表格,则可以使用column
命令:
stat -c "%n:%A" * | column -t -s ':'
但如果您的路径中有:
,那么这不是一个好的解决方案,您可以为其他任何角色进行更改。
当然,您可以在循环中使用相同的逻辑:
#!/bin/bash
red=$(tput setaf 1)
bold=$(tput bold)
reset=$(tput sgr0)
for file in "${1:-"${PWD}"}"/*; do
perm=$(stat -c %A "${file}")
echo "${bold}${file}${reset}:${red}${perm:1:3}${reset}"
done | column -t -s ":"