Linuxコマンドラインを使用して他の拡張子のすべてのサブディレクトリから一致するファイルを削除する最も簡単な方法は何ですか?

Linuxコマンドラインを使用して他の拡張子のすべてのサブディレクトリから一致するファイルを削除する最も簡単な方法は何ですか?

私はナビゲートし、答えを見つけようとしました。最短文字数でこれを行うと、ボーナスポイントが与えられます。

だからfile1.ex1 file2.ex1 file1.ex2はありますが、file2.ex2はありません。

すべてのex1ファイルを削除したいが、ex2バージョンが最初に存在する場合にのみ可能です。

したがって、これは、維持したい拡張子で終わるすべてのファイルのディレクトリのリストを取得し、パイプし、ファイル名の最初の部分に一致するファイルを検索し、削除コマンドでパイプする必要があることを意味します。

私はunraidでこれをやっているので、標準のLinux fuを使いたいです。

私はこれがほとんどの人にとって簡単になることを知っています。そのため、最小限の文字数で完了する必要がある課題を追加しました!ああ、これはそのサブディレクトリの内容にのみ一致するすべてのサブディレクトリに対して機能します。

ありがとうございます!

マサレク

答え1

find . -name "*.ex1" -type f -exec sh -c '[ -f "${1%1}2" ] && echo rm "$1"' sh {} \;

これは、現在のディレクトリでサフィックスを含むすべての一般ファイルを再帰的に見つけ、見つかった各ファイル.ex1()に対して一重引用符で囲まれたシェルスクリプトを実行します$1。単にrm実行するコマンドを印刷します。

  • [ -f "${1%1}2" ] &&パラメータが$1存在し、2最後の文字かどうかをテストします。 ${1%1}最後のものを削除し12。ファイルが存在するかどうかをテストし、[ -f ... ] &&条件がtrueの場合は、次のコマンドを実行します。

コマンドを削除しechoて再実行して、ファイルを実際に削除できます。

サブディレクトリのファイルは削除せず、現在のディレクトリのファイルのみを削除したい場合:

for i in *.ex1; do [ -f "${i%1}2" ] && echo rm "$i"; done

echoもう一度実行するには削除する必要がありますrm

関連情報