名前と拡張子の種類に基づいてファイルを比較および削除するスクリプト

名前と拡張子の種類に基づいてファイルを比較および削除するスクリプト

私のプログラムは、同じ名前の拡張子を持つ2つのファイルを生成します(例:20162012.datと20162012.cnf)。時にはプログラムが.datファイルを生成できないことがあります。したがって、他の.cnfファイルは孤立ファイルになります。このファイルを比較し、パートナーの.datファイルを持たない孤立した.cnfファイルを削除するスクリプトを探しています。

すべてのスクリプトと提案..助けてください。

以下の方法を試しましたが、エラーが発生しました。何かが欠けているかもしれません。修正してください。

スクリプト:

for f in *.cnf
do
    [ -e "$f" ] || continue
    f="${f%%.cnf}"
    [ -e "$f".dat ] || rm -i -- "$f".cut
done

間違い:

rm: cannot remove `20162010.cut': No such file or directory

注:比較と削除のために、スクリプトとファイルを同じフォルダに配置しました。

ありがとうございます!

答え1

する:

for f in *.cnf; do [[ -f ${f%.*}.dat ]] || echo "$f"; done

これはリハーサルなので、実際の練習echoに置き換えます。rm

  • for f in *.cnf繰り返し.cnfファイル

  • [[ -f ${f%.*}.dat ]].dat関連ファイルがあるか確認

  • それ以外の場合(||)ファイルを印刷(または削除)します。

関連情報