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
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)"