類似した名前の多数のファイルを削除するにはどうすればよいですか?

類似した名前の多数のファイルを削除するにはどうすればよいですか?

txt ファイルがたくさんあります。名前が「」のように表示されます。file1.txt file2.txt file3.txt ... file1000.txt これらすべてのファイルを削除するにはどうすればよいですか? 私は Unix 初心者なので、ディレクトリ内の他のファイルを誤って削除してしまうのではないかと心配しています。

他の質問も見ましたが、よく分かりません。

rm -v !("differentfile"|"anotherfile"|"otherfile"|"finalfile") 

したがって、同じ名前で番号だけが異なるすべてのファイルを削除し、必要なものをいくつか残すのですか? また、この行は作業ディレクトリ/フォルダー内のファイルのみを削除するはずですか?

rm を使用して、一度に削除したいファイルのみを指定する方法はありますか?

答え1

rm file*.txtは、現在のディレクトリ内で、名前が文字列 で始まりfile、文字列 で終わるすべてのファイルを削除します.txt

もしあるなら多くのそれらのうちのどれかが欠けていると、「引数リストが長すぎます」というエラーが発生します。この場合、

find . -maxdepth 1 -name 'file*.txt' -delete

その代わり。

このコマンドは、現在のディレクトリ内でfind名前が一致するファイルを検索し、それらを削除します。このオプションは、(現在のディレクトリ)以外のサブディレクトリへの入力を制限します。file*.txt-maxdepth 1find.

このコマンドはファイルとディレクトリを区別しません(rm file*.txtどちらも区別しないのと同じです)。通常のファイルだけを削除したい場合は、

find . -maxdepth 1 -type f -name 'file*.txt' -delete

find非標準-deleteおよび/または-maxdepthオプションを持たない実装の場合は、

find . ! -path . -prune -type f -name 'file*.txt' -exec rm -f {} +

または、単純だが遅いループに頼ることもできます。

for name in file*.txt; do
    rm -f "$name"
done

答え2

同じ構造の他のファイルがない場合、プレフィックス 'file' を使用したいわゆるグロビングを使用します。アスタリスクは他の文字列 (空の文字列を含む) を意味します。まず 'rm' ではなく 'ls' (リスト) で確認します。

ls file*.txt

また、これを「file」の後の少なくとも 1 つの数字と、その後のその他のものに絞り込むこともできます。

ls file[[:digit:]]*.txt

答え3

パターンに他のファイルが含まれるかどうかわからない場合は、たとえば次のようにします。

  • ファイルのリストをチェックしてそれらを別の(一時的な)フォルダに移動しmv PATTERN、すべてが正常であれば、一時フォルダを削除します。

  • を使用しますrm -i PATTERN。削除は手動で確認する必要があります。

  • 実行する前に、またはを実行してリストが正常かどうかを確認できrmます。ls PATTERNecho PATTERN

関連情報