Skip to content

Instantly share code, notes, and snippets.

@luigiMinardi
Last active October 13, 2023 21:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luigiMinardi/b62f9c5e77b9cc21051aa201a9892a04 to your computer and use it in GitHub Desktop.
Save luigiMinardi/b62f9c5e77b9cc21051aa201a9892a04 to your computer and use it in GitHub Desktop.
Bash adventures

Use jdupes to recursivelly search a directory for duplicates (symlinks also searched) then save results in a file.

jdupes -sr . > dups.txt

Go through the first group of duplicates (original and duplicate(s)) on the .txt and open it with the default option that you have (so that you can compare both and choose if you want to delete one of them or not).

cat dups.txt | while read line; do if [ -z "$line" ]; then break; else xdg-open $line; fi; done 

Como eu amo linux pqp
Eu tô brincando com stable diffusion aqui
Aí eu baixei vários modelos, só que os modelos tem versoes diferentes
E eu tava organizando eles, no caso eu queria encontrar quais modelos da minha pasta de modelos são da versão 1.5
então eu fiz um grep pra entrar no arquivo de config desses modelos e printar pra mim o nome do arquivo de cada modelo que tem essa versão
Aí eu fiz um find pra todos os arquivos que tem esse mesmo nome do modelo (que é a foto do modelo, a config e o modelo em si)
E movi todos pra pasta da versão deles
Assim eu tenho ctz que separei tudo certinho e eu não preciso ficar olhando 1 por 1 nos arquivos de config e selecionando e movendo manualmente

Se liga o comando completo

grep --include=\*.civitai.\* --exclude-dir=SD_1.5 -rl ./ -e '"baseModel": "SD 1.5"' 
| grep -oP '([^\./]+)(?=\.civitai)' 
| while read f; do find . -maxdepth 1 -name "*$f*" -exec mv -t ./SD_1.5 {} +; done

No primeiro grep tu tem:
--include=\*.civitai.\* pega qqr arquivo q tenha civitai em algum lugar dele (o arquivo de config)
--exclude-dir=SD_1.5 pq ja tem arquivo dentro dessa pasta (q e a pasta onde to movendo os modelos) e n quero buscar nela
-r busca recursiva em uma pasta
-l retorna o nome do arquivo que a busca corresponder
-e o pattern que tu ta buscando dentro do arquivo
ai no segundo grep tem um regex do Perl -P e o -o faz o retornar so oq der match no regex, o regex seleciona so a parte do nome do arquivo (foo.civitai.bar vai virar foo)
e dps tem um while que le linha por linha o output desse ultimo grep (que ta o nome da cada modelo q deu match) e cria uma variavel f
com essa variavel tu faz um find no diretorio q tu ta, o -maxdepth 1 pq eu n quero recursivo, o *$f* usa a variavel criada, os * pq vai pegar qqr arquivo que tenha o nome do modelo no nome do arquivo, dps tu tem um -exec pra executar outro comando qnd vc achar algum arquivo no find, no caso o mv que move o arquivo pro diretorio especificado no -t (que e variavel do mv ja n do find) e o {} + e a sintaxe do find pra fechar um exec executando o minimo possivel o comando, entao no caso ai o mv vai registrar todos os arquivos e executar 1x apenas e nao 1x pra cada arquivo. e tu fecha o while 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment