-
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 íondotglobcom o comandoshopt -s dotglobIsso 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/Applicationse seus subdiretórios ), e você está usando o bash, defina a opção do shellglobstarcom o comandoshopt -s globstarIsso fará com que
**como um componente de nome de arquivo signifique tudo aqui e abaixo. Entãofor file in /Applications/** do echo "$file" donelistará 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/**/READMEpercorrerá todos os arquivos denominados
READMEna árvore/Applications, efor file in /Applications/**/*.txtencontrará 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 globstarVeja 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.