2017-10-06 114 views
1

我要寻找一个干净的解决方案,这将让我:删除的文件夹是空或包含从文本文件的.gitignore文件

  • 发现,要么是空的或包含文件夹的.gitignore文件
  • 输出他们到一个文本文件
  • 删除文件夹
  • 在以后重新创建它们(不gitignore,只是目录结构)

现在这就是我:

1)发现,是空文件夹或包含的.gitignore文件,并将其输出到文件

dir = $1 
find /c/methuselah/$dir/ -name .gitignore > $dir/gitignoredir.txt 
find /c/methuselah/$dir/ -type d -empty > $dir/emptydir.txt 

gitignoredir.txt: /C /玛士撒拉示例文件内容/项目/文件夹1/subfolder1 /的.gitignore /c/methuselah/project/folder1/subfolder2/.gitignore /c/methuselah/project/folder1/subfolder3/.gitignore

emptydir.txt包含什么,因为空文件中都含有。 gitignore文件。

2)删除文件夹

dir = $1 
filename=$dir/gitignoredir.txt 
filelines='cat $filename' 
for line in $filelines 
do 
    echo 'Removing $line' 
    rm -rf $line 
done 

不幸的是,这并不工作,因为它只是删除了的.gitignore文件。这意味着保留空文件夹。我想删除它们作为删除过程的一部分。我将如何在Bash中完成此操作?

+0

'.txt'是在该行的末尾错过'文件名= $ DIR/gitignoredir' – RomanPerekhrest

回答

1

进行第二阶段的正确方法(删除的文件夹):

dir=$1 
while read -r fn; do rm -rf "${fn%/*}"; done < "$dir/gitignoredir.txt" 
+0

的文件夹不会被删除,我只需要提示'/ c/methuselah/xxx/xxx:是一个目录'。 – methuselah

+0

@methuselah,确保你已经指定了标志'-f'和'-r'标志 – RomanPerekhrest

1

如果你的脚本工作,直到删除,但只删除文件,你可以使用dirname工具直到最后的/删除尾部文件名为止。

变化:

rm -rf $line 

到:

rm -rf "$(dirname $line)" 
相关问题