繁体   English   中英

使用隐藏文件和名称中带有空格的文件\\文件夹

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM