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 rename
e mv
com o mesmo resultado. Estou confuso. Primeiro de tudo, como/por que o erro está sendo relatado pelo find
comando? 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.