我使用fdupes
列出重复的文件。例如:
./topic/org-batch/.svn/pristine/45/45e578cf6c4723c6853b788e6ae35c1705fe9b19.svn-base
./topic/org-batch/Makefile
./topic/org-batch/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode-bak.el
./topic/org-batch/.svn/pristine/2a/2a87de13f3959748235f2a9735b0d7da40ef8545.svn-base
./topic/org-batch/bin/orgmk-stow-orgmk.mk
./home/.emacs.d/elpa/auctex-12.1.1/COPYING
./home/.emacs.d/elpa/org-plus-contrib-20180813/COPYING
./topic/org-batch/.svn/pristine/1e/1ebac4e8f3174f5da74469ad0bf5714ed901233e.svn-base
./topic/org-batch/bin/orgmk-init
但是,上述某些文件(SVN中的副本)是正常的重复文件。
因此,我从.git
或.svn
目录中删除了这些合法副本:
fdupes -r . \
| grep -v "/.svn/" \
| grep -v "/.git/" \
| uniq
但是我在报告中有一些孤立的行:
./topic/org-batch/Makefile
./topic/org-batch/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode-bak.el
./topic/org-batch/bin/orgmk-stow-orgmk.mk
./home/.emacs.d/elpa/auctex-12.1.1/COPYING
./home/.emacs.d/elpa/org-plus-contrib-20180813/COPYING
./topic/org-batch/bin/orgmk-init
我不必在意……因为它们不是副本,我必须删除。
如何删除仅由一行组成的那些块?
目标报告:
./topic/org-batch/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode-bak.el
./home/.emacs.d/elpa/auctex-12.1.1/COPYING
./home/.emacs.d/elpa/org-plus-contrib-20180813/COPYING
答案 0 :(得分:1)
awk可能会有所帮助。您可以通过在输入以及输出记录分隔符(ORS)中重置变量记录分隔符(RS)和字段分隔符(FS)来重新定义分隔行(记录)或行中字段的内容。如果将它们设置为将双换行符(\ n \ n)作为记录分隔,将单个换行符(\ n)作为字段分隔,则可以通过检查大于1的字段数来查找包含多个换行符的每条记录(NF> 1 )。这些应该恰好是您的代码块,包含多行:
awk 'BEGIN {RS="\n\n";ORS="\n\n";FS="\n"} {if(NF>1) print}'
在这里查看示例awk variables。
PS: 如果最后一行的末尾有\ n,则可能是一个问题。