ディレクトリ階層のファイルの一覧表示

ディレクトリ階層のファイルの一覧表示

ディレクトリ階層にファイルを一覧表示する必要があります。そのために、私は次のスクリプトを書いた。

foreach file ( * )
    ls ${file}/*/*/*/*/*.root > ${file}.txt
end

しかし、これを行うには、$ {file}ディレクトリに4つのディレクトリがあることに注意する必要があります。それでは、どのように多くのサブディレクトリが存在するかを知る必要がないように、このスクリプトを一般化する方法はありますか?

答え1

cshこれで、ほぼすべての結果が実際にtcshtsh 6.18.00(20120114)以上を使用している場合に使用できます**(OK tcsh --version)。

ls "${file}"/**/*.root

これはただglobstar変数が設定されている場合に機能します。

set globstar

以下の文書全体tcsh(1)

シェル変数は、すべての文字列(含む)に一致するファイルグローバルパターンを globstar許可するか、**既存のサブディレクトリを再帰的に巡回するように設定できます。たとえば、現在のディレクトリツリー内のすべての.cファイルが一覧表示されます。単独で使用すると、ゼロ個以上のサブディレクトリと一致します(たとえば、/usr/includeディレクトリツリーに名前が付けられたすべてのファイルを一覧表示し、/usr/includeディレクトリツリーで終わるすべてのファイルと一致し、すべての.hと一致します)。サブディレクトリ名またはファイル名自体のファイル)。再帰の問題を防ぐために、globパターンはディレクトリを含むシンボリックリンクには降りません。この設定を上書きするには(+)を使用してください。***/ls **.cls /usr/include/**/time.htime.hls /usr/include/**time.htime.hls /usr/include/**time**.htime*****

答え2

使用find注文する。

foreach file ( * )
    find ${file} -name "*.root" > ${file}.txt
end

約20年が経過したcsh以外のシェルを使用することを検討してください。 zshまたはbashを使用して対話的にスクリプトにcshを使用しないでください

関連情報