別の名前に基づいてファイルを見つけ、1行にすべて削除する方法[複製]

別の名前に基づいてファイルを見つけ、1行にすべて削除する方法[複製]

私は別の名前に基づいてファイルを見つける方法を知っています。問題は、すべてのファイルを一度に削除する方法がわからないことです。 z/OS390 で OMVS を使用しています。

別の拡張子で検索されたファイルを見つけるために、次のことが成功しました。

find . -name "*.xml" -o -name "*.ipm" -type f

1つの名前でのみ検索した後にファイルを削除するには、次の操作が正常に行われました。

find . -name "*.xml" -type f -exec rm -iv {} \;

さて、これら2つのアイデアを混ぜると、姓で見つけたファイルだけを削除します。

find . -name "*.xml" -o -name "*.ipm" -type f -exec rm -iv {} \;

この場合、最初のパターン()に一致するファイルは*.xmlの影響を受けているようです-exec rm

検索してみると、問題は、私が見つけたすべての名前を「維持」する必要があるということです。今後実行rm。 3つの方法を試しましたが、成功しませんでした。

最初の試み:

$ find . -name "*.xml" - o -name "*.ipm" -type f -print0 | xargs -0
FSUM6372 Unknown option "-"
Usage: find directory ... expression
xargs: FSUM6001 Unknown option "-0"

Usage: xargs Ý-l#¨Ý-L #¨ Ý-irepl¨Ý-I repl¨ Ý-n#¨ Ý-tpx¨ Ý-s#¨ Ý-eeof¨Ý-E eof¨ Ýc
md Ýargs ...¨¨

2回目の試み:

$ find . (-name "*.xml" - o -name "*.ipm") -type f
FSUM7332 syntax error: got (, expecting Newline

3回目の試み:

$ find . -type f \(-name "*.xml" -o -name "*.ipm"\)
FSUM6372 Unknown option "(-name"
Usage: find directory ... expression

ベストアンサー1

角括弧の試行では、周囲に空白がないfindというオプションが表示されますが、(-nameどうすればよいかわかりません。代わりに、角かっこの周りにスペースを追加してください。たとえば、次のようになります。

find . \( -name "*.xml" -o -name "*.ipm" \) -type f -exec rm -iv {} \;

または、GNUがある場合は、次のものをfind使用できます。-delete-exec rm -iv {} \;

+ワイルドカードが示すように、引数リストを受け取るコマンドを実行しているため、使用して一部のプロセスを-exec保存するのではなく(一致する頻度によって多くのプロセスを終了できます)、一部のプロセスを終了できます\;。パスをコレクションとして収集し、+各パスに対して1つのアプリケーション呼び出しではなく1つのアプリケーション呼び出し(ここ)を使用して適用します。したがって、より効率的なソリューションがない場合や使用したくない場合は、次の手順を実行します。-execrm-delete

find . \( -name "*.xml" -o -name "*.ipm" \) -type f -exec rm -iv {} +

おすすめ記事