我正在尝试修改 bash shell 脚本并需要一些帮助。
我有一个包含一堆文件的目录。我需要的是循环遍历文件,如果文件名不在特定的文件名集中,则更改文件权限和模式。
像这样的东西:
for my_file in `ls my_dir/*.so`
do
if [ $myy_file ! in ["a.so", "b.so"]]; then
chmod 777 $my_file
chown igor $my_file
fi
done
检查不在集合中的几个文件要容易得多。然后比较大文件名集中的名称。
答案1
如果您不想处理隐藏文件:
for f in my_dir/*.so; do
case $f in
(*/[ab].so) : ;;
(*) chmod 777 -- "$f"; chown igor -- "$f" ;;
esac
done
请注意,将文件权限设置为第777章是非常糟糕的理想,导致安全漏洞并使chown
命令后来浪费。
答案2
在大多数情况下,您可以通过以下方式避免 if 循环结构:
chmod 777 -- my_dir/[^ab].so my_dir/*??.so
chown igor -- my_dir/[^ab].so my_dir/*??.so