![シェルスクリプトを使用して特定のプレフィックスで始まるファイルがディレクトリに存在するかどうかをテストする方法[閉じる]](https://linux33.com/image/91243/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%97%E3%83%AC%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E3%81%A7%E5%A7%8B%E3%81%BE%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E5%AD%98%E5%9C%A8%E3%81%99%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
「ant」で始まるファイルがディレクトリに存在するかどうかをテストする必要があります。ファイルがある場合は削除する必要があります。今私が使っている命令は
test -e $FILE_PATH/$FILE_NAME
私は定義した
FILE_NAME="ant"
FILE_NAME の後に * を追加しても機能しません。
答え1
そのようなファイルが1つだけ存在する場合は、それらを削除するための移植可能な方法があります。
set -- "${FILE_PATH}/${FILE_NAME}"*
[ $# -eq 1 -a -e "$1" ] && rm -- "$1"
ビューには「ant」ファイルがどれだけ存在するかは関係ありませんが、作業が完了したらそのファイル(すべて)が消えるようにするには、次のようにします。
rm -f "${FILE_PATH}/${FILE_NAME}"*
- この方法でそのファイルがない場合、rmは(強制的に静かに)何もしませんが、そのファイルが(1つ以上!)あればrm
削除されます。
答え2
これを行う別の方法は次のとおりです。
-sh-4.1$ dir=$(pwd) ; filename="ant"
if (( $(shopt -s nullglob; set -- ${dir}/${filename}*; echo $#) > 0 )); then rm
${dir}/${filename}* ; fi
shopt -s nullglob
:ディレクトリが空の場合はコメントが返されます。
set -- ${dir}/${filename}* :
位置パラメータを設定します。
$#
:位置パラメータの数を返します。 rm 実行条件
線形として:
1$ dir=$(pwd) ; filename="ant" ; if (( $(shopt -s nullglob; set -- ${dir}/${filename}*; echo $#) > 0 )); then rm ${dir}/${filename}* ; fi