回答:
このコマンドを試してください:
find . -empty -type d -delete
このfind
コマンドは、指定されたパス、この場合は現在のディレクトリ(したがって.
)から特定の検索条件に一致するファイル/ディレクトリを検索するために使用されます。
この-empty
オプションは、空のすべてのファイルとディレクトリに当てはまります。
この-type d
オプションは、指定されたファイルの種類に当てはまります。この場合d
、ファイルタイプディレクトリを表します。
この-delete
オプションは実行するアクションであり、検索で見つかったすべてのファイルに当てはまります。
rm -rf <directory-name>
。これにより、ファイルとサブディレクトリを含むすべてのコンテンツとともにディレクトリが削除されます。-r
一方、オプションは、再帰的に削除を意味-f
指令手段は、削除する前にプロンプトを表示しません。ただし、ディレクトリ/ファイルを削除する前にプロンプトを表示する-f
場合は、-i
オプションをオプションに置き換えます。
stdout
1つのコマンド(例find
)をstdin
他のコマンド(例)にフィードすることでこれを行うことができrm
ますが、不要なファイル/ディレクトリを消去または削除する可能性があるため、非常に注意してください削除!これを行う方法の詳細についてはman
、これらの各コマンドのページを参照してください。安全のために、実際のことを試す前に、一時ディレクトリでそのようなことを常にテストしてください。
rmdir *
すべての空のディレクトリを削除します。空ではないすべてのディレクトリとファイルに対してエラーをスローし、これらのエラーが端末を乱雑にするのを防ぐために、
rmdir * 2> /dev/null
rmdir * 2>/dev/null || true
。(スクリプトにはfind(1)の方法が適していますが、その他の理由:やりたいことをよりうまく表現するためです。)
$HOME
ます。邪悪な笑顔で。
$ tree
.
├── empty_dir1
├── empty_dir2
├── subdir1
│ ├── file1.abc
│ └── file2.abc
└── subdir2
├── file1.abc
└── file2.abc
4 directories, 4 files
$ python -c 'import os;empty=[r for r,s,f in os.walk(".") if not f and not s and r != "." ];map(lambda x: os.rmdir(x),empty)'
$ tree
.
├── subdir1
│ ├── file1.abc
│ └── file2.abc
└── subdir2
├── file1.abc
└── file2.abc
これは次のように機能します。
os.walk()
関数を使用して、ディレクトリツリーを再帰的にウォークします。各反復がでr
私たちがアクセスしている現在のフォルダに設定されている、s
内のディレクトリのリストが含まr
れ、f
そのフォルダ内のファイルのリストが含まれます。もちろん、f
とs
が空の場合、空であることはわかりr
ます。empty
、上記の評価に基づいて、空のすべてのディレクトリのリストを作成できます。map()
はos.rmdir()
、empty
リスト内の各項目で実行するために使用されます。リストの内包表記も代替として使用できます。スクリプトとして、これは次のようになります。
#!/usr/bin/env python
import os
empty=[]
for r,s,f in os.walk("."):
if not f and not s and r != ".":
empty.append(r)
for i in empty:
os.rmdir(i)
/bin/sh
だけとPythonは、実際には、これらの2以上のエレガントな言語である