[英]Working with hidden files and files\folders that have spaces in the name
我制作了一个脚本,该脚本可以获取当前目录中的所有文件,并检查它是常规文件还是文件夹,并为其设置权限。
我的问题是遇到名称中包含空格的隐藏文件\\文件夹和文件\\文件夹时。
这是我的脚本:
#!/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。
其他错误基本相同。
我实际上不确定这是什么问题,如果它是隐藏文件或名称中有空格的事实。 我想这都是问题。
如何修改脚本,使其可以与隐藏文件和名称中带有空格的文件一起使用?
谢谢
PS。 请不要怀疑脚本的用途,这是学校的功课。
处理文件名中的空格非常棘手。 第一条规则是:围绕变量的所有用法双引号。 否则,外壳程序会将空格解释为分隔符。 不幸的是,您不能简单地将列表保存在变量中。 您必须为此使用数组变量。
#!/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
我不建议保留它,因此在使用后将其关闭。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.