我正在尝试遍历目录中的所有文件/目录。其中还包括所有隐藏文件(不带.
和..
)。从 Bash 中的上一个主题建议使用:
for current in $1/$run_folder/{..?,.[!.],}*;
echo current
done
我尝试了一下,tcsh
但没有成功。我怎样才能做到这一点tcsh
?
答案1
我很少使用tcsh
,但你应该能够使用globdot
选项1实现你想要的:
globdot (+) If set, wild-card glob patterns will match files and directo‐ ries beginning with `.' except for `.' and `..'
所以
#!/bin/tcsh
set globdot
foreach current ($1:q/$run_folder:q/*)
printf '%s\n' $current:q
end
当心它会出错没有匹配如果目录中没有非隐藏文件,则会出错。
可以通过包含已知与 一起匹配的通配符来解决这个问题*
:
#!/bin/tcsh
set globdot
set files = (/de[v] $1:q/$run_folder:q/*)
shift files
foreach current ($files:q)
printf '%s\n' $current:q
end
顺便说一句,正确的语法bash
是:
#! /bin/bash -
shopt -s nullglob dotglob
for current in "$1/$run_folder"/*; do
printf '%s\n' "$current"
done
您忘记了扩展周围的引号,这些引号echo
不能用于任意数据,并且默认情况下会无意中留下不匹配的全局变量。该dotglob
选项(相当于 csh/tcsh/zsh 的globdot
选项)避免了对这 3 个不同 glob 的需要。
笔记:
- 表示
(+)
该功能是“在大多数 csh(1) 实现中找不到(特别是 4.4BSD csh)”