web-dev-qa-db-ja.com

特定のディレクトリでファイルを検索する

私は「パイプを使用せず、GREP、FIND、CUT、 PASTEまたはLS

私はこのコマンドに達しました:

ls *.xls /users/home/DESKTOP/*SCHEDULE

これにより、デスクトップ上の.xlsファイルのみが表示され、名前にSCHEDULEが含まれるすべてのディレクトリが開きますが、そうすると、.xlsファイルのみが含まれるディレクトリ上のすべてのファイルが表示されます。

1
TOY

「ファイル」とは、ディレクトリ、シンボリックリンク、ソケット、名前付きパイプなどではなく、「通常のファイル」を意味すると仮定します。

ファイル名のサフィックスが.xlsで、現在のディレクトリ内のディレクトリ内またはその下に存在し、名前に文字列SCHEDULEが含まれているすべての通常ファイルを検索するには、次のようにします。

find . -type f -path '*SCHEDULE*/*' -name '*.xls'

-type fを使用して、findが現在処理しているもののファイルタイプをテストします。通常のファイル(fタイプ)の場合、次のテストが考慮されます(そうでない場合、ファイル以外の場合は、次のテストが検査されます)。

-pathテストは、findが現在調査しているファイルへの完全なパス名をもう一度テストするものです。このパス名が*SCHEDULE*/*と一致する場合、次のテストが考慮されます。パターンの後半の/が原因で、パターンはディレクトリ名のSCHEDULEにのみ一致します(最終的なファイル名ではありません)。

最後のテストはファイル名自体に対するテストであり、ファイル名が.xlsで終わっていれば成功します。

すべてのテストに合格したパス名は、デフォルトで出力されます。

コマンドを次のように短縮することもできます

find . -type f -path '*SCHEDULE*/*.xls'
5
Kusalananda