ディレクトリ内のすべてのファイルとディレクトリを繰り返すには?

ディレクトリ内のすべてのファイルとディレクトリを繰り返すには?

ディレクトリ内のすべてのファイル/ディレクトリを繰り返そうとします。これには、すべての隠しファイル(.および除外..)も含まれます。 Bashの前のトピックでは、次を使用することをお勧めします。

for current in $1/$run_folder/{..?,.[!.],}*;
    echo current
done

私はそれを試しましたが、うまくtcshいきませんでした。どうすればいいですかtcsh

答え1

私はほとんど使用していませんが、オプション1を使用すると必要なものが得られtcshます。globdot

  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)では見つかりません。」

関連情報