find/awk/rm パイプを使用したファイルの削除: ファイル名に空白の問題があります。

find/awk/rm パイプを使用したファイルの削除: ファイル名に空白の問題があります。

まれなファイルを見つける方法に役立つ答えに基づいて

https://unix.stackexchange.com/a/573434/426237

私はこのコマンドを思い出しましたが、まれなファイル(またはディスクから正確にゼロのファイル)を削除します。

find *.* -type f -printf "%S\t%p\n" | gawk '$1 == 0 {print $2}' | xargs rm

残念ながら、ファイル名にスペースが含まれていると問題が発生します。この場合、名前は複数の列に分けられます。空白が含まれていても、gawkがファイル名全体を出力するようにこのパイプコマンドを変更できますか?それとも別のルートを使用する必要がありますか?

[コンテキスト:私はWindowsでbashシェル(Git bash)を使用して、ディスクにファイルがない同期されていないDropboxファイルを見つけて削除しています。 ]

答え1

find | gawk | xargs何らかの理由でパイプが本当に必要な場合は、次のことを試してください(テストされていません)。

find . -type f -printf '%S %p\0' |
gawk 'BEGIN{RS=ORS="\0"} $1 == 0 {sub(/^[^ ]+ /,""); print}' |
xargs -0 echo

テスト完了後echoにに変更してください。rm

関連情報