使用名称中包含空格的隐藏文件和文件\文件夹

雅诺

我制作了一个脚本,它获取当前目录中的所有文件,检查它是普通文件还是文件夹,并为它们设置权限。

我的问题是当我遇到名称中有空格的隐藏文件\文件夹和文件\文件夹时。

这是我的脚本:

#!/bin/bash
FILES=$(pwd)/*
for f in $FILES
  do
  if [ -f $f ]; then chmod u+x $f; fi
  if [ -d $f ]; then chmod u=w,g+r,o-rwx $f; fi
done

这是我从测试计算机上得到的错误示例:

'test/.bwhajtbzmu xswxcgqsvz' 权限不正确:预期为 250,得到 414。

其他错误基本相同。

我实际上不确定这里有什么问题,如果它是隐藏文件或名称中有空格的事实。我想这两件事都是问题。

如何修改脚本以便它可以处理隐藏文件和名称中有空格的文件?

谢谢

附注。请不要质疑脚本的用处,它是学校作业。

阿尔夫

处理文件名中的空格很棘手。第一条规则是:在所有变量用法周围加上双引号否则,shell 会将空格解释为分隔符。不幸的是,您不能简单地将列表保存在变量中。为此,您必须使用数组变量。

#!/bin/bash

FILES=( "$(pwd)"/* )

for f in "${FILES[@]}"
do
  if [ -f "$f" ]; then chmod u+x "$f"; fi
  if [ -d "$f" ]; then chmod u=w,g+r,o-rwx "$f"; fi
done

为了处理隐藏的文件和文件夹(以点开头的文件和文件夹.),您最好设置 shell 选项dotglob,它*也匹配这些(否则不会)。(使用.*不好,因为它也匹配.并且..通常不需要,并且诸如此类的.??*东西与.a通常需要的东西不匹配。):

shopt -s dotglob
FILES=( "$(pwd)"/* )
shopt -u dotglob

我不建议让它一直开着,所以我用完后把它关掉。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章