拡張子が 、 などのすべてのファイルを一覧表示する次のコマンドがありdoc
ますdocx
。
find . -maxdepth 1 -iname \*.doc\*
このコマンドは多数のファイルを返しますが、そのうちのいくつかは削除したいものです。例えば、返される結果は次のようになります。
- 例.docx
- ダミーデータ.doc
- サンプル.doc
Sample.doc と Dummydata.docx を削除したいのですが、オプションを使用してファイルを削除するにはどうすればよいですか-exec
。ファイル名を渡すことはできますか。rm Dummydata.docx Sample.doc
その場合、コマンドは次のようになります。
find . -maxdepth 1 -iname \*.doc\* -exec rm Dummydata.docx Sample.doc
{} after
rm`内でファイル名を渡せますか?例:
find . -maxdepth 1 -iname \*.doc\* -exec rm {Dummydata.docx} Sample.doc
もっと良い方法はあるでしょうか?
答え1
事前にファイル名がわかっている場合は、すぐに削除する方が簡単です。
find . -iname "Dummydata.doc" -delete
または、複数の条件がある場合:
find . \( -iname "Dummydata.doc" -o -iname "Sample.doc" \)
括弧は優先順位を強制しますが、通常、括弧はシェルに対して特別な意味を持つため、括弧をエスケープするか引用符で囲む必要があります。
あるいは、最初に結果のリストを調べたい場合は、見つかったファイルのパス(ここでは に入力{}
)を に渡すことができますsh
。sh
コマンドの場合、パスは になり$0
、削除するファイルの名前と比較できます。
find . -maxdepth 1 -iname "*.doc" \
-exec sh -c 'if [ "$0" == "Dummydata.doc" ] || [ "$0" == "Sample.doc" ]; then echo rm "$0"; fi' {} \;
ここで、echo
正しいファイルが削除されることが確実になったら削除します。ただし、手動でファイルを削除する方が簡単だと思います。