名前に「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
友達になってください ;)