Bash 从文本文件中删除空文件夹或包含.gitignore文件的文件夹

Bash 从文本文件中删除空文件夹或包含.gitignore文件的文件夹,bash,Bash,我正在寻找一种清洁的解决方案,使我能够: 查找空文件夹或包含.gitignore文件的文件夹 将它们输出到文本文件中 删除文件夹 稍后再重新创建它们(没有gitignore,只有目录结构) 这就是我现在所拥有的: 1) 查找空文件夹或包含.gitignore文件的文件夹并将其输出到文件 dir = $1 find /c/methuselah/$dir/ -name .gitignore > $dir/gitignoredir.txt find /c/methuselah/$dir/ -

我正在寻找一种清洁的解决方案,使我能够:

  • 查找空文件夹或包含.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/methuselah/project/folder1/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中实现这一点?

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

dir=$1
而read-r-fn;do rm-rf“${fn%/*}”;完成<“$dir/gitignoredir.txt”

如果您的脚本在删除之前一直在运行,但仅在删除文件,则可以使用该工具获取路径,直到最后一次删除尾随文件名

更改:

rm -rf $line
致:


.txt
在行尾缺少
文件名=$dir/gitignoredir
文件夹没有被删除,我只是得到提示
/c/methuselah/xxx/xxx:is a directory
@methuselah,请确保指定了标志
-f
以及
-r
标志
rm -rf $line
rm -rf "$(dirname $line)"