Ignore um arquivo específico na contagem de arquivos “wc -l”

0

por exemplo. Eu tenho o diretório como ABC . E este diretório contém os seguintes arquivos (ele contém o número de arquivos que eu apenas incluo 4 arquivos aqui)

2014-04-29T06-19-20_17368f93ce.mp4.uploaded
2014-04-29T06-19-20_17368f93ce.mp4
2014-04-29T06-18-20_17368f93ce.mp4

Eu tenho uma variável file_name que contém um dos nomes de arquivo que estão presentes no diretório ABC .

i.e. file_name=2014-04-29T06-19-20_17368f93ce.mp4

Estou usando o seguinte comando para encontrar a contagem total de arquivos que terminam apenas com .mp4 em *ABC* directory

ls -1 /home/ABC/*.mp4 | wc -l

Então, eu só quero ignore arquivo na contagem que estão na variável file_name

Significa file_count apenas ignora os arquivos que estão no nome do arquivo.

    
por Prakash V Holkar 29.04.2014 / 11:03

1 resposta

0

Primeiro de tudo, nunca analisa a saída de ls . Aqui estão algumas abordagens mais seguras:

  1. Use find e grep ( wc -l falha em nomes de arquivos que contêm novas linhas):

    find /home/terdon/foo -not -name "$file_name"  -name '*.mp4' | grep -c /
    

    O -not flag faz com que find ignore qualquer arquivo chamado $file_name .

  2. Nesse caso específico, onde seus arquivos não contêm espaço em branco e você provavelmente não precisa lidar com problemas de portabilidade e de idioma, você pode usar ls . É apenas um mau hábito de entrar. Então, para usar sua abordagem original, basta filtrar os nomes que você não quer usando grep -v :

     ls -1 /home/ABC/*.mp4 | grep -v "$file_name" | wc -l
    
por 29.04.2014 / 14:09