2017-10-06 134 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)" 
相關問題