特定の種類のファイル、つまりネストされたディレクトリにあるdoc pdfファイルを見つけるにはどうすればよいですか。
私が試したコマンド:
$ ls -R | grep .doc
しかし、alok.doc.txt
のようなファイル名がある場合、コマンドもそれを表示しますが、これは明らかに私が望むものではありません。代わりにどのコマンドを使用する必要がありますか?
「ls」と「grep」でより快適な場合は、grepコマンドで正規表現を使用して必要な処理を実行できます(末尾の「$」文字は、.docが行の最後にある必要があることを示します。 「file.doc.txt」を除外):
ls -R |grep "\.doc$"
man の正規表現でgrepを使用する方法の詳細。
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
使用できる他の方法のいくつか:
echo *.{pdf,docx,jpeg}
stat -c %n * | grep 'pdf\|docx\|jpeg'
同様の質問がありました。 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$"
これにより、パスも表示されます。
同様に、ワイルドカード文字*
(正規表現の提案とは異なります)を使用する場合は、-l
フラグとls
を使用して、1行に1つのファイルをリストできます(grepなど)そして、あなたが持っていたような-R
フラグ。次に、*.doc
I.Eを使用して、検索するファイルを指定できます。どちらか
ls -l -R *.doc
または、より少ない行にファイルをリストする場合。
ls -R *.doc