Skip to content

Instantly share code, notes, and snippets.

@zr0n
Created June 8, 2023 23:43
Show Gist options
  • Save zr0n/0838317f5a5545d93530e53380c7e6c2 to your computer and use it in GitHub Desktop.
Save zr0n/0838317f5a5545d93530e53380c7e6c2 to your computer and use it in GitHub Desktop.
Delete git ignored files from folder considering wildcards
using System;
using System.IO;
using System.Diagnostics;
using System.Linq;
using System.Diagnostics;
class Program
{
static void Main()
{
// Caminho para o arquivo .gitignore
string gitignorePath = @".gitignore";
// Lê o arquivo .gitignore e obtém a lista de arquivos e diretórios ignorados
string[] ignoredEntries = File.ReadAllLines(gitignorePath);
// Caminho para o diretório atual
string currentDirectory = Directory.GetCurrentDirectory();
var process = Process.GetCurrentProcess(); // Or whatever method you are using
string currentProcessFilePath = process.MainModule.FileName;
// Percorre todas as entradas ignoradas
foreach (string entry in ignoredEntries)
{
// Ignora comentários e linhas em branco
if (!string.IsNullOrWhiteSpace(entry) && !entry.StartsWith("#"))
{
// Obtém o caminho completo da entrada
string fullPath = Path.Combine(currentDirectory, entry);
// Verifica se a entrada contém caracteres coringas
if (entry.Contains("*") || entry.Contains("?"))
{
// Obtém o diretório base para o padrão coringa
string baseDirectory = Path.GetDirectoryName(fullPath);
// Obtém o padrão coringa para busca
string searchPattern = Path.GetFileName(fullPath);
string[] files = null;
try
{
files = Directory.GetFiles(baseDirectory, searchPattern);
}
catch(Exception ex)
{
continue;
}
// Procura por arquivos e diretórios correspondentes ao padrão coringa
string[] matches = Directory.GetFiles(baseDirectory, searchPattern)
.Concat(Directory.GetDirectories(baseDirectory, searchPattern))
.ToArray();
// Deleta todos os arquivos e diretórios correspondentes
foreach (string match in matches)
{
if (File.Exists(match) && match != currentProcessFilePath)
{
File.Delete(match);
Console.WriteLine($"Arquivo deletado: {match}");
}
else if (Directory.Exists(match))
{
Directory.Delete(match, recursive: true);
Console.WriteLine($"Diretório deletado: {match}");
}
}
}
else
{
// Verifica se a entrada é um arquivo
if (File.Exists(fullPath))
{
// Deleta o arquivo
File.Delete(fullPath);
Console.WriteLine($"Arquivo deletado: {entry}");
}
// Verifica se a entrada é um diretório
if (Directory.Exists(fullPath))
{
// Deleta o diretório e todos os seus arquivos e subdiretórios
Directory.Delete(fullPath, recursive: true);
Console.WriteLine($"Diretório deletado: {entry}");
}
}
}
}
Console.WriteLine("Concluído.");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment