Estou enfrentando um comportamento muito confuso que ls
não consigo procurar. Ele mostra que há conteúdo em um diretório, mas apenas quando estou no diretório de onde eles foram criados.
Deixe-me te mostrar:
ciprian Documents $ pwd
/Users/ciprian/Documents
ciprian Documents $ ls ../Downloads/rss22/
22rss-USB/
ciprian Documents $ ls ../Downloads/rss22/22rss-USB/
HTML/
ciprian Documents $ cd ../Downloads/rss22
ciprian rss22 $ ls
ciprian rss22 $ ls 22rss-USB/
gls: cannot access '22rss-USB/': No such file or directory
Depois que eu cd
ed to ../Downloads/rss22
, seu conteúdo é exibido como vazio. Também é mostrado vazio if I cd ~/Desktop
e then I ls ../Downloads/rss22/
, como no primeiro caso aqui.
Para mim, isso indica que pode haver uma pasta chamada ../Downloads/rss22
dentro de Documents
. Mas não consigo descobrir como exibi-lo. ls -a ~/Documents
não mostra nada relacionado a essas pastas.
O que está acontecendo?
Os arquivos foram criados tentando uma extração parcial de um arquivo:unzip 22rss-USB.zip "22rss-USB/HTML/**/*" -d ../Downloads/rss22/
Para referência, estou no macOS , embora não ache isso relevante (é um Unix, certo?). Estou usando o Bash 5.1.16 (alterado do zsh padrão).
Saída de type pwd
: pwd é um shell embutido.
Acontece que, se eu fizer cd -P ../Downloads/igarss22/
isso, ele mostrará o conteúdo que eu espero. Onde posso ver mais sobre isso? man cd
não mostra nada sobre -P
.
Agora, depoiscd -P ../Downloads/igarss22/
ciprian Documents $ cd -P ../Downloads/igarss22
ciprian igarss22 $ pwd
/Users/ciprian/Library/CloudStorage/OneDrive/Downloads/igarss22
Certo. Então eu esqueci isso; my ~/Documents
é um link simbólico para uma pasta no meu OneDrive:
$ ll ~/ | grep Doc
lrwxr-xr-x 1 ciprian 38 May 19 2022 Documents -> /Users/ciprian/OneDrive/Documents
Que, devido a alguma mágica e mudanças no macOS v12 (Monterey), na verdade vive sob /Users/ciprian/Library/CloudStorage/OneDrive
.
Eu ainda não tenho certeza do que exatamente está acontecendo
A diferença é o tratamento físico versus lógico de
..
:Você aparentemente tem dois
Downloads
diretórios separados:/Users/ciprian/Downloads
/Users/ciprian/Library/CloudStorage/OneDrive/Downloads
Alguns shells, incluindo
bash
e todos os shells POSIX, têm a opção de tratar..
nocd
comando como "tomar o caminho atual exatamente como o usuário o expressou, cortar o elemento mais à direita e mudar para o caminho resultante". Através de links simbólicos, isso funcionará como um "voltar para onde viemos" lógico, retornando de/Users/ciprian/Library/CloudStorage/OneDrive/Documents
(com link simbólico e referido pelo usuário como~/Documents
) para/Users/ciprian
(portanto, o novo caminho neste ponto é apenas~
) e depois de lá para/Users/ciprian/Downloads
. Se você usarcd -L
, este é explicitamente o comportamento que você obterá.Outros programas normalmente não farão isso: eles seguirão os caminhos físicos; portanto, para eles, alterar os diretórios para
../Downloads
começar em/Users/ciprian/Library/CloudStorage/OneDrive/Documents
sempre significará alterar para/Users/ciprian/Library/CloudStorage/OneDrive/Downloads
. Isso também é o que você obterá com ocd -P
.Se você não gosta desse (incorreto) recurso do shell, provavelmente há uma maneira específica do shell de desativá-lo. Com o
bash
shell, adicionarset -P
ouset -o physical
ao seu~/.bashrc
script de inicialização de shell ou semelhante fariabash
com que todos oscd
comandos tivessem a-P
opção, a menos que a-L
opção seja explicitamente usada.Nota . A documentação de
-P
está naman bash
(seção SHELL BUILTIN COMMANDS) porquecd
é um comando interno do Bash.