如何遍历目录中的所有文件和目录?

如何遍历目录中的所有文件和目录?

我正在尝试遍历目录中的所有文件/目录。其中还包括所有隐藏文件(不带...)。从 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 的需要。


笔记:

  1. 表示(+)该功能是“在大多数 csh(1) 实现中找不到(特别是 4.4BSD csh)”

相关内容