使用 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 shell (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

更改echorm完成测试后。

相关内容