再帰なしでlsする方法


19

ディレクトリ内のパターンを持ついくつかのファイルをしようとしています。再帰的ではなく、最初のレベルのみをスキャンしたい。

私のスクリプト:

for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
  echo $i;
done

上記のコマンドは再帰的にスキャンします。最初のレベルのディレクトリのみをスキャンするにはどうすればよいですか?


printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
mikeserv

回答:


39

解析しないでくださいls。また、ALL_CAPS_VARSを使用しないでください

for i in "$incoming_dir"/*"$business_date"*; do

インタラクティブに、サブディレクトリへの下降を防ぐオプションlsがあり-dます:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*

情報をありがとう、私はシステム管理者を困らせるために、名前に新しい行を含むファイルの作成を開始します。
ペタ

それが、スマートsysadmin / programmerがを使用する理由"${i}"です。何が入っているか分からないi
リッキービーム

@Petah:または悪意のある人が名前の付いたファイルを作成し、my_file.doc[newline]another_persons_file.docいくつかのスクリプトが2つのファイル名として見られるものを「rm」しようとすることを望みます... Glennのリンクは必ず読む必要がありますよくある質問と落とし穴のページ)
オリビエデュラック

1
クール。-dオプションを知りませんでした!
-dokaspar

すばらしいです!これは、より単純なことでも機能します。このようなリストなど、すべてのドット接頭辞のファイル:ls -d .*
Wassadamo

8

このコマンドが再帰的である理由はありません。しかし、もし$INCOMINGDIR/*$BUSSINESSDATE*、ディレクトリに一致するは、ディレクトリ自体ではなく、このディレクトリのコンテンツが表示されます。ただし、このレベルを超える再帰はありません。

この影響を回避するには、次のコマンドを使用します。

ls -d "$INCOMINGDIR/"*"$BUSSINESSDATE"*

for ... in コマンド ls出力のあるは危険です。

一般にfind、より良い解決策または

for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.