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 1
find
.
このコマンドはファイルとディレクトリを区別しません(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 PATTERN
echo PATTERN