Bashスクリプトからワイルドカード*を呼び出すことはできません。

Bashスクリプトからワイルドカード*を呼び出すことはできません。

名前に「v」を含むファイルを削除するプログラムを作成しようとしています。

私のスクリプトはディレクトリを表示するように要求します。コードは基本的に次のようになります

read -p "directory: " DIRECT

rm *v* $DIRECT

*v*それはファイルやディレクトリの名前だと思い、そのようなものが存在しないことを知らせて、ただその場所に移動してDIRECT削除できないと言います。

ベストアンサー1

「rm」の代わりに「find」を使用するとどうなりますか?

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

スクリプトは次のとおりです。

read -p "directory: " directory

find "$directory" -name "*v*" -type f -delete

find は開始ディレクトリが存在することを確認し、デフォルトでそのディレクトリのすべてのサブディレクトリを検索します。再帰的に検索したくない場合は、-maxdepth 0検索を開始ディレクトリに限定するオプションを追加する必要があります。上記の例では、-nameフラグを使用してファイル名を検索しましたが、正規表現(-regexオプション)を使用することもできます。ファイルタイプ(フラグ)によって検索を制限することもできます-type。たとえば、-type f検索を通常のファイルに限定します。見つかったファイルを削除することを示すには、-deleteフラグを使用してください。より多くのオプションが必要な場合はsh# man find友達になってください ;)

おすすめ記事