コマンドライン経由でサイズが0バイトのファイルを削除しますか?


16

そのため、他のディレクトリで満たされたディレクトリを取得しましたが、サイズのないファイルを削除できるかどうか疑問に思っていました。通常、これらのファイルは0バイトです。これらすべてのサブディレクトリをマージしたいので、完全に合法なファイルを無重量の0バイトファイルに置き換えることができます。ゼロバイトファイルを削除する方法はありますか?

回答:


34

Findコマンドを使用して、サイズでファイルを検索し、ファイル名を標準出力に出力します。

find . -type f -size 0b -print

代わり-print-deleteファイルを削除するのではなく、画面上でそれらを印刷します。

find . -type f -size 0b -delete

今、ある場所から別の場所にファイルを移動する方法はありますか?サイズが同じ場合は競合を置き換えますが、サイズが異なる場合は両方のコピーを保持しますか?
user245115

これはrsyncの仕事のように思えます。

7
-empty代わりに使用できます-size 0b
ケビン

6

サイズが0のすべてのファイルを再帰的に検索して削除します。

find . -type f -size 0 -print0 | xargs -I{} -0 rm {}

例:

% ls -og   
total 4
-rw-rw-r-- 1 0 Jun  7 20:31 bar
-rw-rw-r-- 1 5 Jun  7 20:29 foo

% find . -size 0 -print0 | xargs -I{} -0 rm {}

% ls -og                                      
total 4
-rw-rw-r-- 1 5 Jun  7 20:29 foo

4

シェルで直接行うこともできます。これは、空の隠しファイル(名前がで始まるもの)を削除したくない場合に便利です.。これを行うこともできますがfind、代わりにシェル自体を使用することもできます。

shopt -s globstar
for file in **/*; do [ ! -s "$file" ] && [ -f "$file" ] && rm "$file"; done

説明

  • shopt -s globstar**1つ以上のサブディレクトリに一致させるbashのglobstarオプションをオンにします。**/*現在のディレクトリとそのすべてのサブディレクトリ内のすべてのファイルとディレクトリに一致します。
  • for file in **/*; do ...; done :見つかったすべてのファイルとディレクトリを反復処理します。
  • [ ! -s "$file" ][ -s "$file" ]ファイルが存在し、空でない場合はtrueです。したがって、[ ! -s "$file" ]!テストの逆)ファイルが存在しないか、空の場合はtrueです。
  • [ -f "$file" ]:ファイルが通常のファイルである場合はtrue。ディレクトリやデバイスファイル、シンボリックリンクなどではありません。
  • rm "$file" :ファイルを削除します。

&&これが唯一の空の、通常のファイルを削除しますので、以前のものが成功した場合、次のコマンドをのみ実行されていることを確認してください。


私の答えは複雑だと思った:) +1
AB

2

上記のほとんどの答えは正しいですが、このコマンドを探してください。

サイズが0バイトのファイルは、空のファイルを意味します

ただし、次のコマンドを実行できます。

find . -type f -empty -delete

これにより、すべての空のファイルが削除されます。

削除する前にこれらのファイルを確認できます。

find . -type f -empty

Ubuntu 14.04 LTSでは、なしで-type f-empty空のディレクトリも削除されます。manページを確認してください。
ブルラッシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.