testingfilesizecheck.sh: line 6: /media/doctor/123A123E1A123456/Users/Tim/Downloads/PokemonRed/Binary House/Final Structure Directory/Category/*
estou usando o comandofor f in "/media/doctor/123A123E1A123456/Users/Tim/Downloads/PokemonRed/Binary House/Final Structure Directory/Category/*"
Se eu for muito específico sobre isso e disser "/media/doctor/123A123E1A123456/Users/Tim/Downloads/PokemonRed/Binary House/Final Structure Directory/Category/ABRA.bin"
que funcionará.
Sou novo no linux (Ubuntu) e no bash e estou lutando para usar o google-fu para diagnosticar isso. Cada site de exemplo que posso encontrar sugere que o que estou fazendo com um curinga deve funcionar, mas eles mantêm seus exemplos no mesmo diretório em que o script terminal / bash está trabalhando ativamente.
Antes de fazer esta postagem, criei uma solução alternativa usando ls que parecia muito indireta porque eu faço minha lista de arquivos na pasta e meio que vou "à mão" em vez de usar o loop for como um comando sucinto. Portanto, estou procurando uma resposta academicamente por que o curinga não se expande neste caso.
Editar: tentei a sugestão de colocar o asterisco fora das aspas duplas. Mas também não funcionou. Aqui está o que eu tenho ATÉ AGORA AS RESPOSTAS PÓS:
Este é o copiar e colar do meu terminal depois de inserir uma linha "bash testingfilesizecheck.sh" e pressionar enter:
doctor@doctor-X570-AORUS-ELITE:~/Documents$ bash testingfilesizecheck.sh
/media/doctor/123A123E1A123456/Users/Tim/Downloads/PokemonRed/Binary House/Final Structure Directory/Category/*
testingfilesizecheck.sh: line 24: /media/doctor/123A123E1A123456/Users/Tim/Downloads/PokemonRed/Binary House/Final Structure Directory/Category/*: No such file or directory
A linha 24 vem comentando todas as outras tentativas que fiz no script testinfilesizecheck.sh. Aqui está o script menos as linhas comentadas.
#!/bin/bash
for f in "/media/doctor/123A123E1A123456/Users/Tim/Downloads/PokemonRed/Binary House/Final Structure Directory/Category/"*
do
echo "$f"
actualsize=$(wc -c < "$f")
done
echo $actualsize
Novamente, há um arquivo em /media/doctor/123A123E1A123456/Users/Tim/Downloads/PokemonRed/Binary House/Final Structure Directory/Category/ABRA.bin
Mas o curinga não está se expandindo para aceitar ABRA.bin. Em ambas as variações é apenas um asterisco literal. Eu pensei, sim, o asterisco como uma variável faz sentido que não possa estar em uma string entre aspas com base em minha compreensão rudimentar de outras linguagens de programação. Mas é claro que não funciona para mim.
As aspas evitam que o curinga
*
("glob") seja expandido para corresponder aos arquivos. Em vez disso, é tratado como um caractere de asterisco literal.Em vez disso, use isso, onde o curinga não está entre aspas:
A parte importante aqui é que os itens que contêm espaços ou outros caracteres especiais são citados, e o curinga não. Você também pode usar qualquer uma dessas variantes (caminhos encurtados para facilitar a leitura):
Observe que, a menos que você tenha definido
nullglob
(shopt -s nullglob
), uma situação em que não há correspondências resultará em uma única iteração em seufor
loop com um caminho que inclui um caractere de asterisco literal. Se você não pode definirnullglob
, proteja-se contra a expansão "falsa" com algo assim como a primeira linha do loop:Coloque * após as aspas de fechamento: