Liste todos os arquivos com o mesmo nome e número de arquivos

3

Gostaria de saber se existe um comando fácil para listar todos os arquivos com os mesmos nomes e números desses arquivos? Eu gostaria de fazer isso de forma recursiva e não quero dizer nome de arquivo concreto. Eu posso imaginar a saída ficaria assim:

FILENAME   NUMBER
filename1    2
filename2    4
filename3    8 
    
por Al Bundy 17.07.2015 / 13:19

2 respostas

8

Usando o GNU find :

find /some/path -type f -printf '%f\n' | sort | uniq -c

Usando o POSIX find :

find /some/path -type f | sed 's~^.*/~~' | sort | uniq -c

Isso pressupõe que seus nomes de arquivos não contenham novas linhas.

    
por 17.07.2015 / 14:07
0

desde que você não pode ter arquivos com o mesmo nome no mesmo diretório, eu assumi que você os tem em diretórios diferentes (por exemplo, pasta1 / pasta de arquivos2 / pasta de arquivos1 / pasta de outros arquivos2 / outro arquivo)

for name in NAME1 NAME2 NAME3 ; do
    echo -n $name \ \ \ 
    ls */$name | wc -l 
done

Se eles tiverem apenas o mesmo prefixo (ou seja, picture1 picture2 frame1 frame2), então é quase o mesmo:

for name in NAME1 NAME2 NAME3 ; do
    echo -n $name \ \ \ 
    ls $name* | wc -l
done

Para o título apenas preceda a coisa toda com

echo FILENAME \ \ \ \ NUMBER

(é o script BASH, claro)

[Atualize após as solicitações nos comentários:]

#!/bin/bash

  # alternative 1
  # put filenames sorted and without double entries into array fnames
  fnames=( $( find -type f -printf "%f\n" | sort | uniq ) )
  # alternative 2: including folder names:
  ## fnames=( $( find -printf "%f\n" | sort | uniq ) )

  # count each names number of appearances:

  for (( i=0 ; i<=${#fnames[@]}-1 ; i++ )) ; do
    # alternative 1: files only
    number=$( find -type f -wholename "*/${fnames[$i]}" -printf "%f\n" | wc -l )
    # alternative 2: files and folders with same name
    ## number=$( find -wholename "*/${fnames[$i]}" -printf "%f\n" | wc -l )

    echo -e ${fnames[$i]} \ \ \ $number

  done
    
por 17.07.2015 / 13:35

Tags