
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
basename
comando em vez decut
obter o nome do arquivo. - Em vez de usar
grep
nos resultados defind
, você pode usar, por exemplo,find
a opção-regex
ou-iregex
.
Usar find -exec
com 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 {} \;