... where the Dand Nin the globbing qualifier at the globbing pattern end 与dotglobandnullglob在bashshell 中具有相同的效果,并且 where从文件名中:r删除文件名后缀(r〜“root”,即名称的根没有后缀)并:t删除路径名的目录部分(t~“tail”,即路径名的尾部)。
要按降序(按名称)对名称进行排序,请在zshshell 中使用
print -rC1 -- ./**/*.sh(DNOn:r:t)
...其中添加的On意思是“按名称倒序排列”。
bash在顶部对循环的输出进行排序是通过输出传递的问题sort -r:
for name in ./*.sh; do
basename "$name" .sh
done | sort -r
像这样使用 find/cut 会破坏子目录中的任何文件。在当前目录中,尝试
ls | cut -d"." -f1
,或者如果有子目录,尝试find * -name "*.sh" | sed "s/.sh$//"
有了新的查找,它
*
会扩展到当前目录中的所有条目,所以它可能是(例如find file1.sh dir1 dir2 -name "*.sh"
。通过 sed 的管道,只是去掉了结尾。假设您要显示与
*.sh
当前目录中的模式匹配的名称,不带.sh
后缀:该
basename
实用程序输出作为第一个参数给出的路径名的文件名部分,如果给出第二个参数,则从名称的末尾剥离该字符串。上述循环不考虑隐藏名称。如果您需要递归地执行此操作,那么您可以
find
像这样使用:这会调用
basename
每个找到的路径名并sh
从每个路径名中删除文件名后缀。如果您使用的是
bash
shell,您也可以这样做:这设置了一些 shell 选项,以便能够找到隐藏的名称 ( ),如果没有匹配项 ( ),则完全
dotglob
避免循环,并且能够使用通配模式 ( ; 匹配“递归”)。nullglob
**
globstar
使用
zsh
外壳,您将获得类似的效果... where the
D
andN
in the globbing qualifier at the globbing pattern end 与dotglob
andnullglob
在bash
shell 中具有相同的效果,并且 where从文件名中:r
删除文件名后缀(r
〜“root”,即名称的根没有后缀)并:t
删除路径名的目录部分(t
~“tail”,即路径名的尾部)。要按降序(按名称)对名称进行排序,请在
zsh
shell 中使用...其中添加的
On
意思是“按名称倒序排列”。bash
在顶部对循环的输出进行排序是通过输出传递的问题sort -r
:同样使用
find
命令:但是请注意,如果任何文件名包含嵌入的换行符,这会给您带来奇怪的结果。