回答:
.php
、現在のディレクトリでファイルを検索しました。しかし.php
、現在のディレクトリのファイルのみを返し、サブディレクトリで再帰的に検索しませんでした。だからこそ、find
コマンドを再帰的に検索するかどうかを尋ねています。
find
コマンドは再帰的に検索します。パラメータを引用しない場合、シェルはで拡張を行う可能性がある*
ため、現在のディレクトリ内のファイルと一致します。
使用してglobstar
シェルオプションを、私たちは、再帰グロブを利用することができます./**/*
bash-4.3$ shopt -s globstar
bash-4.3$ for i in ./**/*.xml; do printf "%s\n" "$i" ; done
./adwaita-timed.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/META-INF/context.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/beans.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/web.xml
Perlには、Find
再帰的なディレクトリツリートラバースを可能にするモジュールがあります。特別なfind()
関数内で、目的のサブルーチンと、横断したいディレクトリを定義できます.
。この例ではです。そのような場合のワンライナーは次のようになります。
bash-4.3$ perl -le 'use File::Find; find(sub{-f && $_ =~ /.xml$/ && print $File::Find::name},".")'
./adwaita-timed.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/beans.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/web.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/liangweb/build.xml
Perlには再帰的なツリートラバーサル専用のモジュール全体がありますが、Pythonにはモジュールのwalk()
一部であるきちんとした関数がありos
、最上位パスのタプル、すべてのサブディレクトリのリスト、およびファイル名のリストを繰り返し返します。次のことができます。
bash-4.3$ python -c 'import os,sys; [ sys.stdout.write(os.path.join(r,i)+"\n") for r,s,f in os.walk(".") for i in f if i.endswith(".xml") ]'
./adwaita-timed.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/beans.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/web.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/liangweb/build.xml
これはスクリプトとしてははるかにすっきりしているかもしれません。
#!/usr/bin/env python
import os,sys
for r,s,f in os.walk("."):
for i in f:
if i.endswith(".xml")
print(os.path.join(r,i))
他の答えはfind
、再帰的なトラバーサルについて言及しており、それが仕事の頼りになるツールです。言及する必要があるのは、目的の形式で出力を印刷する、通常のファイルのみを見つける、inode番号で検索する、変更日で検索する、特定のコマンドを実行してファイルを処理するfind
など、複数のコマンドラインスイッチがあるという事実です引数としてファイルを渡す方法(現在のファイルの標準プレースホルダー)、および他の多くのファイルについては、のマンページを参照してください。-printf
-type f
-inum
-mtime
-exec <command> {} \;
{}
find
find
ls -R | grep .xml