小文字/大文字を含めることができるファイルを削除する方法

小文字/大文字を含めることができるファイルを削除する方法

存在できるファイルを削除する方法小文字大文字ケース

たとえば、file_name は次のようになります。

  • STOCK.Repoまたは
  • Stock.REPOまたは
  • Stock.repoまたは
  • 自己株式購入契約
  • ...など

私は次を実行します:

 rm -f $file_name

目的は、リモートシステムから小文字/大文字の可能性があるstock.repoファイルを削除することです。

答え1

Bash固有のソリューションの場合:

$ shopt -s nocaseglob

rmその後、コマンドを実行してください。

このオプションをオフにするには、次を使用します。shopt -u nocaseglob

完全性を期すための選択肢ですが、あまりエレガントなソリューションを指摘します。

$ rm [sS][tT][oO][cC][kK].[rR][eE][pP][oO]

答え2

find次のコマンドを使用してこれを実行できます。

find /path/to/directory -type f -iname stock\.repo -exec rm -f {} \;

しかし、非常に注意してください。 /path/to/directory で再帰的に動作します。永続的な損傷を引き起こす可能性がある本番システムでコマンドを実行する前に、maxlengthオプションの使用を検討してコマンドに慣れておく必要があります。

答え3

zshシェルを使用すると、ksh93globごとに大文字と小文字を区別しない一致を実行できます。

  • zsh:

    set -o extendedglob # best in ~/.zshrc
    rm -- (#i)$filename
    
  • ksh93:

    rm -- ~(i:"$filename")
    

    ただし、一致するファイルがない場合は~(i:stock.repo)リテラルがに渡されrm、ファイルがある場合は削除されます(zsh上記の操作はエラーのために失敗し、rmこの場合はまったく呼び出されません)。

    Nただし、タグに加えてタグを設定することもできますi

    rm -- ~(Ni:"$filename")
    

    その後、不一致がある場合はrm空の引数として呼び出されます(おそらく引用符が原因のエラーである可能性があります。渡すことを意味するため)。いいえそれなら全然議論はありません)。これによりエラーが発生しますrm: cannot remove '': No such file or directoryが、少なくとも間違ったファイルを削除しません。

答え4

私は以下の方法を使ってみました。上記の答えはとても良いです。以下は私の試みです

ls -ltr | awk '{print $9}' | sed -n '/^STOCK.Repo$/Ip'  |awk '{print "rm" " " $1}'| sh

関連情報