1つのコマンドラインを使用して、特定の拡張子(たとえば、.bak
)を持つすべてのファイルを現在のディレクトリとすべてのサブフォルダーから安全に削除するにはどうすればよいですか?単純に、rm
を使用するのが怖いのは、一度間違って使用したので、今はアドバイスが必要だからです。
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
最初にコマンドshopt -s globstar
を実行します。これはコマンドラインで実行でき、そのシェルウィンドウでのみ有効になります。 .bashrc
に入れると、新しく起動されたすべてのシェルがそれを取得します。このコマンドの効果は、**/
を現在のディレクトリとそのサブディレクトリ内のファイルに再帰的に一致させることです(デフォルトでは、**/
は*/
:と同じことを意味します)。次に:
rm **/*.bak
(またはgvfs-trash **/*.bak
またはあなたが持っているもの)。
ファイルを削除することは、私にとってrm
を使用すべきではありません。以下が代替案です。
Sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
Flimmがコメントで述べているように:
パッケージ
trash-cli
は、gvfsに依存せずにgvfs-trash
と同じことを行います。
そう:
Sudo apt-get install trash-cli
trash-cli
パッケージはtrash
コマンドを提供するため、これにエイリアスを作成する必要はありません。
Eliah Kaganが広範なコメントで明らかにしているように、find
を使用してこの再帰を行うこともできます。その場合、エイリアスを使用できないため、以下のコマンドはtrash-cli
がインストールされていることを前提としています。エリアのコメントを要約します。
このコマンドは、現在のディレクトリまたはそのサブディレクトリ以下にあるすべての.bak
ファイルとシンボリックリンクを検索して表示します。
find . -name '*.bak' -xtype f
それらを削除するには、trash
コマンドで-exec
を追加します。
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
は、ファイルとファイルへのシンボリックリンクを選択しますが、フォルダーは選択しません。 .bakフォルダも削除するには、その部分を削除し、-execdir
ディレクトリ内のcannot trash non-existent
ファイルの.bak
エラーを回避する.bak
を使用します。
find . -name '*.bak' -execdir trash {} +
特定のタイプのすべてのファイルを削除したいが、現在のフォルダーから「深い」フォルダーが1つだけの場合:
find . -maxdepth 2 -name "*.log" -type f -delete
-maxdepth 2現在のディレクトリ "。"は最初のフォルダーとしてカウントされるため。
考慮された名前または接尾辞を持つすべてのファイルを再帰的に削除します。
find . -name '*.pyc' -type f -delete
考慮された名前を持つすべてのディレクトリを再帰的に削除します。
find ~ -path '*/__pycache__/*' -delete
find ~ -type d -name '__pycache__' -empty -delete
少し厳密に制御されますが、1行で:
find ~ -path '*/__pycache__*' -delete
[NOTE]:
d
はディレクトリオプションで、f
はファイルオプションです。
Gitリポジトリ内にいる場合は、次を使用できます。
git clean -fdx
これにより、追跡されていないファイルと.gitignore内のファイルが削除されます。