パターン検索およびディレクトリ内のファイルを一覧表示するためのシェルスクリプト

パターン検索およびディレクトリ内のファイルを一覧表示するためのシェルスクリプト

ls | agrep "<search pattern #1>;<search pattern #2>;...;<search pattern #n>"私はディレクトリ内の特定のファイルの検索/リストを迅速かつ効率的に実行するために特定の検索パターンを使用しました。たとえば、空のディレクトリを作成し、touch次のように空のファイルを入力しました。

~ ls -l
total 0
-rw-r--r-- 1 me users 0 May  7 14:00 animals-bird_dog_cat.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-bird_dog.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-bird.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-cat_dog_bird.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-cat_dog.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-cat.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-dog_bird.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-dog_cat_bird.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-dog_cat.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-dog.txt

次に、を使用して、ls -l | agrep "cat;bird"名前に次のファイルのみを含むファイルを検索/検索できます。そして次のようになります。

~ ls -l | agrep 'cat;bird'
-rw-r--r-- 1 me users 0 May  7 14:00 animals-bird_dog_cat.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-cat_dog_bird.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-dog_cat_bird.txt

AFAICT、この方法は非常に高速で効果的です(私はより良いソリューションが欲しい)。これは毎日たくさん行われるので、CLIで検索パターンを提供することで、これらの作業を実行できる単純なシェルスクリプトを書くのが最善だと思いました。たとえば、次のように単純なシェルスクリプトを作成し、名前を付けてmls実行可能にしました。

#!/bin/bash
bold=$(tput bold)
italic=$(tput sitm)
normal=$(tput sgr0)
if [ "$#" -lt 1 ]; then
    echo "${bold}Usage${normal}: $0 <search string 0> [... <search string n>]"
    exit 0
fi
patterns=""
for ((i=1;i<$#;i++))
do
    patterns+="${!i};"
done
patterns+="${!#}"
/usr/bin/ls -lart | agrep '${patterns}${!#}'

その後、検索モードを使用して上記のシェルスクリプトを実行すると、mls cat bird以下のように何も返されません。

~ ls -l | agrep 'cat;bird'
-rw-r--r-- 1 me users 0 May  7 14:00 animals-bird_dog_cat.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-cat_dog_bird.txt
-rw-r--r-- 1 me users 0 May  7 14:00 animals-dog_cat_bird.txt
~ mls cat bird
~

私が逃したものは何ですか?

ベストアンサー1

ここで切り替えることができますzsh。対応するglobは、OR、AND(およびAND-NOTとNOT)と近似をサポートします。

$  set -o extendedglob # best in ~/.zshrc
$ ls -ld -- (#a1)*dig*~^(#a1)*bard*
-rw-rw-r-- 1 chazelas chazelas 0 May  8 16:24 animals-bird_dog_cat.txt
-rw-rw-r-- 1 chazelas chazelas 0 May  8 16:24 animals-bird_dog.txt
-rw-rw-r-- 1 chazelas chazelas 0 May  8 16:24 animals-cat_dog_bird.txt
-rw-rw-r-- 1 chazelas chazelas 0 May  8 16:24 animals-dog_bird.txt
-rw-rw-r-- 1 chazelas chazelas 0 May  8 16:24 animals-dog_cat_bird.txt

おすすめ記事