webdevqa.jp.net

シェルの再帰ディレクトリにある特定のタイプのファイルをリストする方法は?

特定の種類のファイル、つまりネストされたディレクトリにあるdoc pdfファイルを見つけるにはどうすればよいですか。

私が試したコマンド:

$ ls -R | grep .doc

しかし、alok.doc.txtのようなファイル名がある場合、コマンドもそれを表示しますが、これは明らかに私が望むものではありません。代わりにどのコマンドを使用する必要がありますか?

37
Kumar Alok

「ls」と「grep」でより快適な場合は、grepコマンドで正規表現を使用して必要な処理を実行できます(末尾の「$」文字は、.docが行の最後にある必要があることを示します。 「file.doc.txt」を除外):

ls -R |grep "\.doc$"

man の正規表現でgrepを使用する方法の詳細。

64
Benoit Courtine

lsコマンド出力は、主に人間による読み取りを目的としています。自動処理の高度なクエリを実行するには、より強力なfindコマンドを使用する必要があります。

find /path -type f \( -iname "*.doc" -o -iname "*.pdf" \) 

Bash 4.0 ++を持っているかのように

#!/bin/bash
shopt -s globstar
shopt -s nullglob
for file in **/*.{pdf,doc}
do
  echo "$file"
done
32
ghostdog74

使用できる他の方法のいくつか:

echo *.{pdf,docx,jpeg}

stat -c %n * | grep 'pdf\|docx\|jpeg'

3

同様の質問がありました。 etcディレクトリ内のすべての設定ファイルのリスト(パス付き)が必要でした。これはうまくいきました:

find /etc -type f \( -iname "*.conf" \)

すべての.confファイルとそのパスの素敵なリストが表示されます。出力は次のようになります。

/etc/conf/server.conf

しかし、すべてのファイルでWordを見つけるためにそれらのファイルをgrepする、またはすべてのファイルで設定を行うなど、これらすべてのファイルで何かをしたかったのです。を使用します

find /etc -type f \( -iname "*.conf" \) -print0 | xargs -0 grep -Hi "ServerName"

「ServerName」などの設定を含む/ etc内のすべての設定ファイルをgrep経由で検索するには出力は次のようになります。

/etc/conf/server.conf: ServerName "default-118_11_170_172"

お役に立てば幸いです。

シド

find . | grep "\.doc$"

これにより、パスも表示されます。

2
Leo Bastin

同様に、ワイルドカード文字*(正規表現の提案とは異なります)を使用する場合は、-lフラグとlsを使用して、1行に1つのファイルをリストできます(grepなど)そして、あなたが持っていたような-Rフラグ。次に、*.doc I.Eを使用して、検索するファイルを指定できます。どちらか

ls -l -R *.doc

または、より少ない行にファイルをリストする場合。

ls -R *.doc
0
Will C