我无法读取文件参数的权限。我看起来它与隐藏文件有关,但我不确定原因。
当前代码:
#!/bin/bash
if [ $# = 0 ]
then
echo "Usage ./checkPerm filename [filename2 ... filenameN]"
exit 0
fi
for file in $@
do
ls -l | grep $file | cut -f1 -d' '
# Do Something
done
我可以获得每个输入的权限,但是当一个隐藏文件通过循环运行时,它会重新打印所有文件的权限。
-bash-4.1$ ll test*
-rw-r--r-- 1 user joe 0 Nov 11 19:07 test1
-r-xr-xr-x 1 user joe 0 Nov 11 19:07 test2*
-r--r----- 1 user joe 0 Nov 11 19:07 test3
-rwxr-x--- 1 user joe 0 Nov 11 19:07 test4*
-bash-4.1$ ./checkPerm test*
-rw-r--r--
-rw-r--r--
-r-xr-xr-x
-r--r-----
-rwxr-x---
-r--r-----
-rw-r--r--
-r-xr-xr-x
-r--r-----
-rwxr-x---
-bash-4.1$
循环中发生了什么?
答案 0 :(得分:1)
这是你的grep:
ls -l | grep 'test2*'
这将以test
开头,因为你基本上要求以test
开头的任何内容可能以0或更多2
s结尾,这是由2*
。
要获得预期的结果,只需移除循环并将其替换为:
ls -l "$@" | cut -d' ' -f1
或保留你的循环,但删除grep:
ls -l $file | cut -d' ' -f1
另外,从技术上讲,这些文件都不会被隐藏。 bash中的隐藏文件以.
开头,如.bashrc
。
答案 1 :(得分:1)
当您在循环中执行ls -l
然后grep
结果时,如果名称中包含test1
的文件,但在开头没有,则选择它们grep
,为您提供额外的结果。您可以通过以下方式看到:
ls -l | grep test
并且看到的条目多于ls -l test*
所获得的条目。
在你的循环中,你应该只使用:
ls -ld "$file" | cut -d' ' -f1