コマンドラインを使用して、指定したパスからnode_modulesフォルダーを再帰的に削除します


100

ローカルディレクトリに複数のnpmプロジェクトを保存しています。ここで、node_modulesフォルダなしでプロジェクトのバックアップを取りたいと思います。これは、多くのスペースを使用し、を使用していつでも取得できるためnpm installです。

そのため、コマンドラインインターフェイスを使用して、指定したパスからすべてのnode_modulesフォルダーを再帰的に削除するソリューションが必要です。どんな提案/助けも非常に高く評価されます。

回答:


239

削除するディレクトリのリストを印刷します。

find . -name 'node_modules' -type d -prune

現在の作業ディレクトリからディレクトリを削除します。

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

または、段階的な削除にtrashbrew install trash)を使用することもできます。

find . -name node_modules -type d -prune -exec trash {} +

27
-prune重要な最適化です。node_module(ネストされたnode_modulesを探すために)ディレクトリに再帰しない場合があります
rzymek 2017年

1
プロジェクトの場合、私/node_modules/gulp-server-livereload/node_modules: Directory not emptyは多くの「内部」node_modulesフォルダーに入ります。これを回避する方法は?
josemigallas 2018

15
これは、私が真剣に考えているように、このコードをコピーするためにこの回答に20回目になります... xD
Cipi 2018

6
の意味は'{}' +何ですか?
Rokit

3
{}は、find見つかったファイルパスに置き換わるプレースホルダーです。それぞれに対して実行するのではなく、すべてのファイルパスを単一のコマンドに追加する+ように指示findしますrm
タムリン

26

受け入れられた答えを改善し、

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

コマンドが非常に長い時間実行されてすべてのフォルダーをフェッチしてから削除コマンドを実行し、コマンドを再開可能にし\;、実行中のコマンドの進行状況-printを確認するには、削除されているディレクトリを確認することをお勧めします。

注:最初cdにルートディレクトリに移動してからコマンドを実行するか、find .使用する代わりにfind {project_directory}

フォルダを1つずつ削除するには

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' \;

フォルダを1つずつ削除して、削除するフォルダを印刷するには

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

編集:

これをインタラクティブに行う方法が好きな人は、@ jeckepの回答を参照して、プルーニングするディレクトリでこれを実行してください。

npx npkill

受け入れ答え感謝@Sidharth、上のニースの改善
nclarx


11

私はこの解決策に出くわしました、

  • まず、を使用findしてフォルダを見つけ、フォルダの名前を指定します。
  • 削除コマンドを再帰的に実行する -exec rm -rf '{}' +

次のコマンドを実行して、フォルダを再帰的に削除します

find /path -type d -name "node_modules" -exec rm -rf '{}' +


1

これは本当にうまくいきます

find . -name "node_modules" -exec rm -rf '{}' +

2
これは以前の回答の複製であり、説明はありません。
moopet

1

bash削除する関数node_modulesnode_modules見つかったパスを出力しながら、現在の作業ディレクトリからすべてのディレクトリを再帰的に削除します。

あなたはただあなたのどこかに置く必要があります $PATH

rmnodemodules(){

  find . -name 'node_modules' -type d -prune -exec echo '{}' \; -exec rm -rf {} \; 

}

0

Windowsの場合、次の.BATファイルを使用node_modulesして、現在のフォルダーから再帰的に削除します。

@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q) 

または、経由CMD.EXE

cmd.exe /c "@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q)"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.