Listar pastas sem determinado arquivo

1

Eu tenho 150 subpastas. Aparentemente 4 deles não possuem arquivos que deveriam estar neles, chamados PKA.dump

Como posso executar um comando no linux para descobrir quais pastas estão faltando no arquivo PKA.dump?

    
por Jackson Hart 25.04.2015 / 22:39

3 respostas

1

link

Simples, isso transparece. O seguinte obtém uma lista de diretórios com a capa e compara isso com uma lista de todos os diretórios de segundo nível. Linhas que aparecem em ambos os "arquivos" são suprimidas, deixando uma lista de diretórios que precisam de capas.

comm -3 \
    <(find ~/Music/ -iname 'cover.*' -printf '%h\n' | sort -u) \
    <(find ~/Music/ -maxdepth 2 -mindepth 2 -type d | sort) \
| sed 's/^.*Music\///'

Hooray.

Notas:

  • Os argumentos de

    comm são os seguintes:

    • -1 suprime linhas exclusivas do arquivo1
    • -2 suprime linhas exclusivas do arquivo2
    • -3 suprime as linhas que aparecem nos dois arquivos
  • comm só recebe arquivos, por isso o método de entrada <(...) kooky. Isso canaliza o conteúdo por meio de um arquivo real [temporário].

  • comm precisa de entrada classificada ou não funciona e find não garante de forma alguma um pedido. Também precisa ser único. A primeira operação find pode encontrar vários arquivos para cover.* , para que possa haver entradas duplicadas. sort -u rapidamente faz com que eles caiam em um. A segunda descoberta sempre será única.

  • dirname é uma ferramenta útil para obter o diretório de um arquivo sem recorrer a sed (et al).

  • find e comm estão um pouco confusos com sua saída. O sed final está lá para limpar as coisas, então você fica com Artist/Album . Isso pode ou não ser desejável para você.

por 25.04.2015 / 23:44
0

Você poderia listar as pastas em um arquivo cada (com ls -1 folder | sort > file1 , etc), a execução diff nos arquivos. Isso listará as diferenças entre os arquivos:

Digamos que eu tenha 2 pastas vc e vc2 . Eu gero as listas assim:

ls -1 vc | sort > vc.txt
ls -1 vc2 | sort > vc2.txt

Então eu posso ver as diferenças assim:

diff vc.txt vc2.txt

que produz:

< requirements.txt

, o que significa que requirements.txt está ausente ( '<' está ausente) de vc2.txt (segundo na linha diff ).

    
por 25.04.2015 / 23:45
0

Supondo que você queira pesquisar um nível de subdiretórios, recomendo um simples loop de Bash:

for f in * ; do [ -d "$f" -a ! -e "$f/PKA.dump" ] && echo "$f" ; done

Isto é, "para todas as entradas (não ocultas) neste diretório, se for um diretório e não existir um PKA.dump dentro, imprima o nome do diretório".

    
por 27.04.2015 / 08:08

Tags