-
Como anotado por Jeff Schaller ,
*
normalmente funciona comols
- Ele não mostrará coisas cujos nomes começam com.
(um período). Se você está usando bash, e você deseja obter coisas cujos nomes começam com.
, s et (ativar) o sh ell opt íondotglob
com o comandoshopt -s dotglob
Isso fará com que
*
funcione comols -A
. Ele ainda não mostrará.
e..
, mas mostrará todo o resto começando com.
. -
Sua pergunta menciona "tudo em um diretório". Esta é uma frase um tanto ambígua. Se você quer dizer tudo no diretório (nível superior)
/Applications
, então as outras respostas estão bem. Mas se você quiser tudo na árvore/Applications
(isto é, tudo no diretório/Applications
e seus subdiretórios ), e você está usando o bash, defina a opção do shellglobstar
com o comandoshopt -s globstar
Isso fará com que
**
como um componente de nome de arquivo signifique tudo aqui e abaixo. Entãofor file in /Applications/** do echo "$file" done
listará todos os objetos (arquivos, diretórios, etc.) na árvore
/Applications
.Observe que isso não pode ser combinado com outros caracteres no mesmo nível de componente; ou seja, você não pode fazer coisas como
foo**bar
. No entanto, você acrescenta outros componentes após o**
. Por exemplo,for file in /Applications/**/README
percorrerá todos os arquivos denominados
README
na árvore/Applications
, efor file in /Applications/**/*.txt
encontrará todos os arquivos cujos nomes terminam com
.txt
. -
Você pode definir várias opções de uma só vez; por exemplo, com
shopt -s dotglob globstar
Veja a documentação bash para uma lista completa de opções. Você pode u definir opções com
shopt -u
. - Você deve sempre citar todas as suas referências de variáveis de shell
(por exemplo,
"$file"
) a menos que você tenha um bom motivo para não e você tem certeza que sabe o que está fazendo.