AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 763480
Accepted
LesRhorer
LesRhorer
Asked: 2023-12-10 19:00:24 +0800 CST2023-12-10 19:00:24 +0800 CST 2023-12-10 19:00:24 +0800 CST

Por que estou recebendo "nenhum arquivo" nos resultados de busca de arquivos existentes?

  • 772

Este é um problema menor, mas é um pouco chato. Eu olhei e olhei para isso, mas não consigo entender por que isso está acontecendo ou como impedi-lo. Tenho vários milhares de arquivos de vídeo que estou convertendo lentamente do formato MPEG II para h.264 em contêineres MP4 por vários motivos. Cada arquivo .mpg possui um arquivo .txt e um arquivo .jpg associado a ele, e esses arquivos precisam ser alterados de "xxxxxxxxxxxxxx.mpg.txt e xxxxxxxxxxxxxxx.mpg.jpg para xxxxxxxxxxxxxxx.mp4.txt e xxxxxxxxxxxxxx.mp4.jpg , respectivamente, então os arquivos .mpg antigos precisam ser excluídos. Eu uso o seguinte script chamado mpgscan.sh para fazer exatamente isso:

#! /bin/bash

suffix=".mpg"
mpegname="$@"
filename=${mpegname%"$suffix"}
mp4name="$filename"".mp4"
if [ -s "$mp4name" ]
then
    if lsof "$mp4name" > /dev/null || lsof "$mpegname" > /dev/null
    then
        echo "$filename in use"
    else
        if [[ -f "$mpegname"".txt" ]]
        then
            rename -f 's/\.mpg.txt$/.mp4.txt/' "$mpegname"".txt"
        fi
        if [[ -f "$mpegname"".jpg" ]] 
        then
            rename -f 's/\.mpg.jpg$/.mp4.jpg/' "$mpegname"".jpg"
        fi
        echo "$filename removed"
        rm "$mpegname"
    fi
fi

A conversão dos arquivos está acontecendo em segundo plano, então de vez em quando eu atualizo os arquivos associados em lote digitando o seguinte comando:

find /RAID/Recordings -name "*.mpg" -exec mpegscan.sh {} \;

Funciona muito bem, mas em vez de obter o resultado esperado como:

/RAID/Recordings/Movies/K/K-9 (Recorded Tue Apr 01, 2008, HBOHD) removed
/RAID/Recordings/Movies/K/Kate & Leopold (Recorded Sat Sep 11, 2010, ENCR1H) removed
/RAID/Recordings/Movies/K/Kindergarten Cop (Recorded Tue May 06, 2008, HBOHD) removed
/RAID/Recordings/Movies/K/King Ralph (Recorded Wed Jul 16, 2008, HBOHD) in use

Eu recebo:

/RAID/Recordings/Movies/K/K-9 (Recorded Tue Apr 01, 2008, HBOHD) removed
find: '/RAID/Recordings/Movies/K/K-9 (Recorded Tue Apr 01, 2008, HBOHD).mpg.jpg': No such file or directory
find: '/RAID/Recordings/Movies/K/K-9 (Recorded Tue Apr 01, 2008, HBOHD).mpg.txt': No such file or directory
/RAID/Recordings/Movies/K/Kate & Leopold (Recorded Sat Sep 11, 2010, ENCR1H) removed
find: '/RAID/Recordings/Movies/K/Kate & Leopold (Recorded Sat Sep 11, 2010, ENCR1H).mpg.jpg': No such file or directory
find: '/RAID/Recordings/Movies/K/Kate & Leopold (Recorded Sat Sep 11, 2010, ENCR1H).mpg.txt': No such file or directory
/RAID/Recordings/Movies/K/Kindergarten Cop (Recorded Tue May 06, 2008, HBOHD) removed
find: '/RAID/Recordings/Movies/K/Kindergarten Cop (Recorded Tue May 06, 2008, HBOHD).mpg.jpg': No such file or directory
find: '/RAID/Recordings/Movies/K/Kindergarten Cop (Recorded Tue May 06, 2008, HBOHD).mpg.txt': No such file or directory
/RAID/Recordings/Movies/K/King Ralph (Recorded Wed Jul 16, 2008, HBOHD) in use

Eu tentei os comandos renamee mvcom o mesmo resultado. Estou confuso. Primeiro de tudo, como/por que o erro está sendo relatado pelo findcomando? O comando find não é emitido para arquivos .jpg ou .txt, mas sim para arquivos .mpg. Mais especificamente, por que existe algum tipo de erro? Os arquivos relatados existem e estão sendo processados ​​corretamente pelo comando mv / rename. Não só isso, mas até verifico o script para ter certeza de que eles existem antes de renomeá-los. o que estou perdendo? O script funciona perfeitamente sem erros se eu executá-lo manualmente em qualquer arquivo .mpg.

bash
  • 1 1 respostas
  • 978 Views

1 respostas

  • Voted
  1. Best Answer
    frostschutz
    2023-12-10T19:57:23+08:002023-12-10T19:57:23+08:00

    findlê uma lista de entradas de diretório e as processa uma por uma. Para cada entrada que corresponda às suas condições, ele -execusa seu script de shell.

    Seu script então renomeia os arquivos, alterando assim a lista de entradas de diretório que findainda está em processamento. Portanto, findainda há nomes de arquivos em sua lista de tarefas que você já removeu/renomeou.

    Ao findtentar processá-los, reclama que o arquivo não existe mais.

    Exemplo:

    # create files in random order
    $ shuf -e {a..z} {a..z}.foo {a..z}.bar | xargs touch
    
    # rename using find -exec mv
    $ busybox find -name "[a-z]" -exec mv {}.foo {}.baz \;
    find: ./i.foo: No such file or directory
    find: ./t.foo: No such file or directory
    find: ./d.foo: No such file or directory
    ...
    

    Estou usando busybox findaqui porque o GNU findutils findjá é inteligente o suficiente para lidar com esse caso. Você pode estar usando uma versão mais antiga ou até mesmo a variante busybox se este for um shell incorporado em algum tipo de NAS.

    Você pode ignorar esse erro se os arquivos ausentes tiverem sido ignorados pelas suas condições de qualquer maneira; alternativamente, vamos encontrar primeiro a lista de arquivos e processá-la depois.

    Às vezes é suficiente usar find -print0 | xargs -0padrão em vez de find -execpadrão. Ajuda se o seu shellscript puder processar vários argumentos em vez de apenas um.

    • 10

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve