論理演算子を使用して、1行の1つおよび/または別のパターンに一致するすべてのファイルを削除できますか?

論理演算子を使用して、1行の1つおよび/または別のパターンに一致するすべてのファイルを削除できますか?

.txt削除やファイルを一行で書きたいです。.csv

私のディレクトリには何がありますか?

tachomi$ ls
file1.csv  file1.sql  file1.txt  file2.csv  file2.sql  file2.txt

ファイルだけが必要なのですが、or .sqlのような論理演算子を使って一行にコマンドを実行する方法がないかと思います。ANDOR

tachomi$ rm *.txt AND *.csv
tachomi$ rm *.txt OR *.csv

与えられた2つのパターンに一致するすべてのファイルを削除する方法

答え1

簡単に:

rm *.txt *.csv

シェルが中括弧拡張をサポートしている場合は、次のことができます。

rm *.{txt,csv}

答え2

*.txt両方のパターンのいずれかに一致するファイル、つまりANDに一致するファイル*.csv、つまりORに一致するファイルを一致させるには、*.txt両方のパターンを一覧表示します*.csv。 (定量子と論理演算子の入れ子が重要です!)

rm *.txt *.csv

どちらのパターンもファイルと一致しないと変更されていないため、名前またはファイルが見つからないと文句を言いrmます。苦情を避ける一般的な方法は、存在しないファイルを自動的に無視することを使用することです。*.txt*.csvrm -f

rm -f *.txt *.csv

パターン1とパターン2の両方に一致する文字列に一致する演算子はありません。この場合、両方とも一致する*.txt文字列がとにかく存在しません*.csv

kshでは、orに一致する文字列をパターン化@(*.txt|*.csv)または一致させます。*.@(txt|csv)最初に実行している場合はbashでこのモードを使用でき、最初に実行している場合はzshで使用するか、zshのデフォルト構文を使用できます。複合パターンに一致するファイルがない場合は、そのままコマンドに渡されます。 ATT ksh に (mksh、bash、または zsh 以外の ATT ksh のみ) パターンに一致するファイルがない場合は、空のリストとして拡張を使用できます。不足している引数について文句を言わないように、まだ使用する必要があります。*.txt*.csvshopt -s extglobsetopt ksh_glob*.(txt|csv)~(N)*.@(txt|csv)rm -f

rm -f ~(N)*.@(txt|csv)

Bash では、shopt -s nullglob最初に実行して、一致しないすべてのパターンを空のリストに展開します。

shopt -s nullglob extglob; rm -f *.@(txt|csv)

zshではNglob修飾子を使用するか、setopt nullglob最初に実行してください。

rm -f *.(txt|csv)(N)
setopt nullglob extglob; rm -f *.@(txt|csv)

関連情報