Variável no caminho para arquivo no script bash

Variável no caminho para arquivo no script bash

Eu tenho um arquivo que contém cerca de 20 mil strings. Cada string nesse arquivo deve ser um argumento para um comando no script bash.

A princípio meu script gera um arquivo com essas strings.

find /home/alotoffolders -type f -name  "*.mp4" | grep some_greps > ~/tests/find_smth

Depois disso, tentar definir uma variável, isso fará parte do argumento

filename=$(cut -d/ -f11 ~/tests/find_smth)

Então estou tentando ler todos os arquivos linha por linha e usar cada string como argumento de entrada (parece que funciona), mas para saída - há algum problema.

  for i in `cat ~/tests/find_smth`; do ./other_script -input $i -output /home/folder1/folder2/$filename; done

O script não consegue ver o caminho estático antes de $filename.

Onde está o problema?

Responder1

  • Nunca use for i in $(cat ...) ...ou similar. Ele percorre palavras, não linhas. E mesmo que assim fosse, os nomes dos arquivos podem conter novas linhas.
  • Usarexpansão de parâmetro shellou basenamecomando em vez de cutobter o nome do arquivo.
  • Em vez de usar grepnos resultados de find, você pode usar, por exemplo, finda opção -regexou -iregex.

Usar find -execcom sh -c:

find /home/alotoffolders -type f -iregex 'some_pattern.mp4' \
  -exec sh -c '
    /path/to/other_script -input "$1" -output "/home/folder1/folder2/${1##*/}"
  ' find-sh {} \;

informação relacionada