我正在尝试使用?通配符只显示1个字符文件,?。*显示1个带扩展名的字符文件。
什么有效:
cd /mydir
ls ? ?.*
我正在尝试在shell脚本中使用它,因此我无法使用“cd”
我想要开始工作
ls ? ?.* /mydir
它给了我输出:
ls: cannot access ?.*: No such file or directory
我也试过了:
ls /mydir ? ?.*
给了我与之前完全相同的输出。
答案 0 :(得分:3)
你写的评论:
我在大学期间为linux管理员和我当前的shell脚本中的一个。我的老师只是在讨论基本的东西。而且,我目前的共同点是获取我们类服务器的tmp目录中的文件数,以.log结尾的文件数和只有1个字符名的文件数,并将数据存储在文件中然后将存储的数据显示给用户。我知道这很愚蠢,但这是我的任务。
我只希望他们不会教你在大学里解析ls
的输出......这是最可怕的事情之一。请参考以下链接:
您选择的解决方案
ls /mydir/? /mydir/?.* | wc -l
在两种情况下被打破:
shopt -s nullglob
或仅将stderr
重定向到devnull
。touch $'a.lol\nlol\n\lol\nlol\nlol'
。 LOL。正确的bash方式如下:
shopt -s nullglob
shopt -u failglob
files=( /mydir/? /mydir/?.* )
echo "There are ${#files[@]} files found."
答案 1 :(得分:0)
cd
在shell脚本中完美运行,使用它。为了对脚本产生最小的影响,我将使用子shell:
( cd /mydir && ls ? ?.* )
这样,你就不会改变脚本的当前工作目录(而$OLDPWD
也不会改变,cd /mydir; ...; cd -;
会被破坏。
答案 2 :(得分:0)
虽然ls
似乎是一个明显的选择,find
可能更合适:
find /mydir \! -name "." -a \( -name "?" -o -name "?.*" \)
答案 3 :(得分:0)
当您撰写ls ? ?.* /mydir
时,您尝试显示与三种不同模式匹配的文件:?
,?.*
和/mydir
。您只想匹配/mydir/?
和/mydir/?.*
,因此此命令:ls /mydir/? /mydir/?.*
。
编辑:虽然这是对初始问题(列出/mydir/?
和/mydir/?.*
)的正确答案,但OP希望这样做来解析输出并获取文件计数。请参阅@ gniourf_gniourf的答案,这是一种更好的方法。