Den*_*ote 6 command-line find files
在迁移到 git 之前,我正在清理 CVS 存储库。作为准备工作的一部分,我需要找到(并可能删除)任何仅包含Attic
文件夹的文件夹。
我的 unix-fu 不强,但这是我尝试过的,这不起作用,但希望传达意图。
shopt -s globstar
for file in **/*
do
if [ -d "$file" ];then
if [`ls | wc -l` == 1 && `ls Attic | wc -l` == 1]; then
((echo Attic-only folder))
fi
fi
done
Run Code Online (Sandbox Code Playgroud)
第二部分是找到任何空的文件夹(或文件夹链)。
例如,如果/foo/bar/Attic
被移除,并且/foo/bar
现在都是空的,那么我们也可以杀死树的那部分。
背景:我正在尝试清理 CVS 存储库以迁移到 git。CVSAttic
为已删除的文件创建一个文件夹。在过去的 10 年里,发生了一些坏事。我完全了解风险和影响。我已经备份了我的数据,我正在制作一份副本。
与bash
、GNUfind
和comm
:
comm -12 \
<( find /path/to/CVS/repo -printf '%h\n' \
sort | uniq -u ) \
<( find /path/to/CVS/repo -name Attic -type d -printf '%h\n' | \
sort )
Run Code Online (Sandbox Code Playgroud)
第一个find
打印存储库中所有内容、文件和目录的 basename
s ( )。然后打印只有一个后代、文件或目录的目录。-printf '%h\n'
sort | uniq -u
然后第二个find
打印目录basename
的 s Attic
。该集合与上面集合的交集(即comm -12
)正是仅具有后代的目录Attic
。
这当然很高兴地忽略了符号链接和其他有趣的东西,以及带有嵌入换行符的文件名。无论如何,您不应该将它们放在 CVS 存储库中。
归档时间: |
|
查看次数: |
922 次 |
最近记录: |