Localizando diretórios cujos arquivos explicitamente contêm sinais de escape como], - Espaço todos juntos

0

Eu tenho vários arquivos de vídeo, que contêm caracteres de escape como [em combinação com [1920x1080]. Quando eu executo:

find /run/media/user/usbdisk -type f -iname [HD, 1920x1080] - Wild Wild West.mp4 -ls

então recebo um erro como este:

find:paths must precede expression

Quando executo

find /run/media/user/usbdisk -type f -iname "[HD, 1920x1080] - Wild Wild West.mp4" -ls

eu não obtenho resultado, embora eu tenha certeza, o arquivo existe.

O mesmo resultado (nada encontrado) ao executar:

find /run/media/user/usbdisk -type f -iname '[HD, 1920x1080] - Wild Wild West.mp4' -ls

Para receber o nome do diretório (basename) do meu filme, armazenei o nome em uma variável chamada video, para que meu comando tenha o seguinte aspecto:

dname=$(find /run/media/user/usbdisk -type f -iname "$video" -exec dirname {} \;)

mas isso leva ao resultado do erro (veja acima).

Como posso encontrar o comando (ou qualquer outro) para encontrar exatamente o arquivo com nome exato, incluindo os sinais de escape? Existe alguma maneira ou é necessário substituir os sinais de escape nos nomes dos arquivos? Eu quero evitar isso. Obrigado antecipadamente.

    
por Linuxwhisperer 04.07.2017 / 14:54

1 resposta

1

-iname avalia seu argumento, * , ? e [] têm um significado especial para ele, então você precisa escapar deles se quiser passá-los literalmente.

Considere também usar -quit caso você encontre dois ou mais arquivos em pastas diferentes (duplicatas?). Eu acho que você espera que dname seja um nome de diretório único.

Eu entendo que $video já foi dado:

video="[HD, 1920x1080] - Wild Wild West.mp4"

Nesse caso, tente:

video1=$(echo $video | sed 's|\[|\[|g; s|\]|\]|g')
dname=$(find /run/media/user/usbdisk -type f -iname "$video1" -exec dirname {} \; -quit)

Isso pode ser feito em uma linha. Eu escolhi introduzir uma variável adicional para maior clareza.

    
por 04.07.2017 / 15:20