.bak1つのコマンドラインを使用して、現在のディレクトリとすべてのサブフォルダーから特定の拡張子(たとえば)を持つすべてのファイルを安全に削除するにはどうすればよいですか?単純に、rm一度間違って使用したので使用するのが怖いのですが、今はアドバイスが必要です。
.bak1つのコマンドラインを使用して、現在のディレクトリとすべてのサブフォルダーから特定の拡張子(たとえば)を持つすべてのファイルを安全に削除するにはどうすればよいですか?単純に、rm一度間違って使用したので使用するのが怖いのですが、今はアドバイスが必要です。
回答:
あなたrmが恐れている場合、この場合に使用する必要さえありません。使用find:
find . -name "*.bak" -type f -delete
ただし、注意して使用してください。最初に実行:
find . -name "*.bak" -type f
削除するファイルを正確に確認します。
また、それ-deleteがコマンドの最後の引数であることを確認してください。の前に置くと-name *.bak argument、すべてが削除されます。
rm *.bakサブディレクトリでは機能しません。
rm *.bakは、現在のディレクトリにある.bakで終わるすべてのファイルのみが削除されます。また、グロブをいじるのに必要なサブディレクトリで処理を行うには、-rオプションを使用するか、検索例を使用します。
rm -r *.bak!また.bak、すべてのコンテンツで終わるディレクトリも削除します。
-deleteがコマンドの最後の引数であることを確認してください。-name *.bak引数の前に置くと、すべてが削除されます。
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
-deleteフラグの代わりにこれを使用することに利点はないと思いますfind。詳細については、findを使用してファイルを削除するためのGNUマニュアルエントリを参照してください。
ファイルの削除は、私にとってはあなたが使うべきものではありません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-trashgvfsに依存しない場合と同じことを行います。
そう:
sudo apt-get install trash-cli
trash-cliパッケージには、必要な処理を行うコマンドが用意されているため、このエイリアスを作成する必要trashはありません。
Eliah Kaganが広範なコメントで明らかにしているように、を使用してこの再帰を行うこともできますfind。その場合、エイリアスを使用できないため、以下のコマンドはがインストールされていることを前提としていますtrash-cli。エリアのコメントを要約します。
このコマンドは.bak、現在のディレクトリまたはそのサブディレクトリ以下のすべてのファイルとシンボリックリンクを検索して表示します。
find . -name '*.bak' -xtype f
それらを削除するに-execは、trashコマンドでを追加します:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype fファイルとファイルへのシンボリックリンクを選択しますが、フォルダーは選択しません。.bakフォルダーも削除するには、その部分を削除し、を使用して-execdir、ディレクトリ内のファイルのcannot trash non-existentエラーを回避し.bakます.bak。
find . -name '*.bak' -execdir trash {} +
rm物事を削除するために使用しない」は物議を醸す声明ですが、物事を元に戻すことができるものを使用する方が賢明であることが多いことに同意する必要があります。
trash-cliはにgvfs-trash依存しない場合と同じことを行いgvfsます。
find . -name "*.bak" -type fされたものを表示すると言うようtrash *.bakです。それは本当にあなたの言うことですか?あなたがゴミ箱にディレクトリを移動することができtrashたりgvfs-trash、しかしtrash *.bak唯一の名前で終わるファイルやディレクトリに移動します.bakと、現在のディレクトリにすぐに常駐します。シェルが展開される*.bakため、サブディレクトリ内のファイル自体にtrash *.bakは影響しません。.bak.bak
ls *.bak(これはあなたの言うことだと思います)はどのようなtrash *.bakゴミをリストします。find . -name '*.bak' -xtype f -exec trash {} +は、の下にあるすべての.bakファイルを破棄します.。エイリアスを使用できないため、代わりにインストールtrash-cliまたは書き込みgvfs-trashを行ってください。以下に例を示します。 -xtype fファイルとファイルへのシンボリックリンクを選択しますが、フォルダーは選択しません。.bak フォルダーも削除するにはfind . -name '*.bak' -execdir trash {} +、を使用して、ディレクトリ内のファイルのcannot trash non existentエラーを回避し.bakます.bak。回答の中でこれを自由に使用してください。
考慮された名前または接尾辞を持つすべてのファイルを再帰的に削除します。
find . -name '*.pyc' -type f -delete
考慮された名前を持つすべてのディレクトリを再帰的に削除します。
find ~ -path '*/__pycache__/*' -delete
find ~ -type d -name '__pycache__' -empty -delete
少し厳密に制御されますが、1行で:
find ~ -path '*/__pycache__*' -delete
[ 注 ]:
dはディレクトリオプションでfあり、ファイルオプションです。
gitリポジトリ内にいる場合は、次を使用できます。
git clean -fdx
これにより、追跡されていないファイルと.gitignore内のファイルが削除されます。
rm *.bakますか?