「ls」が特定のディレクトリにあるときにのみコンテンツを表示するのはなぜですか?

「ls」が特定のディレクトリにあるときにのみコンテンツを表示するのはなぜですか?

ls検索できない非常に混乱した動作に直面しました。ディレクトリにコンテンツがあることを示しますが、コンテンツが作成されたディレクトリにある場合にのみ表示されます。

お見せします:

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

cd編集した後は、../Downloads/rss22内容が空白のように見えます。 I次のIの場合、ここの最初のケースのようにcd ~/Desktop空白になります。ls ../Downloads/rss22/

私にとって、これは次のツールがあるかもしれないことを示唆しています。../Downloads/rss22 ~へ Documents。ところで、どのように表示すべきかわかりません。ls -a ~/Documentsこのフォルダに関する内容は表示されません。

どうしたの?

これらのファイルは、アーカイブから部分抽出を試みて作成されます。unzip 22rss-USB.zip "22rss-USB/HTML/**/*" -d ../Downloads/rss22/

ちなみに私はアップルシステム私はそれが重要ではないと思いますが(Unixですか?)私はBash 5.1.16(デフォルトのzshで変更されています)を使用しています。

:pwd の出力はシェル組み込みtype pwdコマンドです。

cd -P ../Downloads/igarss22/これは私が期待どおりに表示されることを示しています。これに関する詳細情報はどこで確認できますか?man cdについては何も表示されません-P

今、その後cd -P ../Downloads/igarss22/

ciprian Documents $ cd -P ../Downloads/igarss22

ciprian igarss22 $ pwd
/Users/ciprian/Library/CloudStorage/OneDrive/Downloads/igarss22

正しい。だから私はこれを忘れていました。~/Documents私のOneDriveの下のフォルダへのシンボリックリンク。

$ ll ~/ | grep Doc
lrwxr-xr-x    1 ciprian   38 May 19  2022 Documents -> /Users/ciprian/OneDrive/Documents

どんな魔法と変化のためにMacOS v12(モントレー)、実際に住んでいます/Users/ciprian/Library/CloudStorage/OneDrive

何が起こったのかまだわかりません。

答え1

違いは物理的処理と論理的処理にあります..

明らかに、2つの別々のDownloadsディレクトリがあります。

  • 一つは/Users/ciprian/Downloads
  • もう一つは/Users/ciprian/Library/CloudStorage/OneDrive/Downloads

一部のシェル(すべてのPOSIXシェルを含む)には、コマンドで「ユーザーが示すように正確に現在のパスを取得し、右端の要素を切り取り、結果のパスに変更」として処理するbashオプションがあります。シンボリックリンクを使用すると、これは論理的な「私たちが来た場所に戻る」役割を果たします。 (シンボリックリンクとユーザーが呼び出した)から(次にこの時点の新しいパスは)次に戻ります。そこ。これを使用すると、得られる明示的な動作です。..cd/Users/ciprian/Library/CloudStorage/OneDrive/Documents~/Documents/Users/ciprian~/Users/ciprian/Downloadscd -L

他のプログラムは通常これを行いません。実際のパスに従うので、ディレクトリをからに変更することは../Downloads常に/Users/ciprian/Library/CloudStorage/OneDrive/Documentsに変更することを意味します/Users/ciprian/Library/CloudStorage/OneDrive/Downloadscd -P

シェルのこの(バグ付き)機能が気に入らない場合は、それを無効にするシェル固有の方法があるかもしれません。bashシェルの場合、または同様のシェル起動スクリプトにまたはをset -P追加すると、明示的に使用されない限り、すべてのコマンドはそのオプションで機能します。set -o physical~/.bashrcbashcd-P-L

ノート。文書はBashの内部コマンドであるため(SHELL BUILTIN COMMANDSセクション)-Pにあります。man bashcd

答え2

もう1つの可能性はOneDriveに関連しています。リクエストに応じてファイルそしてフォルダリダイレクトオプションはMacOSとWindowsで利用できますが、OneDrive for Businessに限定することができます。

どちらのオプションも、One Drive対応ディレクトリツリーからフォルダとファイルのローカルコピーを削除して、ローカルボリュームのスペースを節約する機能を提供します。

ローカルファイルは次のことができます。手動One Driveクライアントで利用可能な「スペースクリア」操作を使用して削除します。ただし、上記の機能のいずれかまたは両方を使用すると、3か月間アクセスしなかったファイル/フォルダのローカルコピーが削除されると思います。

これらのリソースのクラウドコピーへのポインタは保持され、デフォルトのファイル管理アプリケーション(Explorer / Finderなど)またはOneDriveクライアントを使用してアクセスすると、OneDriveはすぐにダウンロードしてローカルで使用できるようにします。

問題は、これがクラウドポインタとしてのみ存在するファイルとフォルダを一覧表示しますが、ファイルを開くかディレクトリナビゲーションなどの操作を実行するときに同期をトリガーしないほとんどの* nixシェルでは機能しないことです。 )。

これは、WSL の bash シェルから OneDrive for Business サポート ディレクトリにアクセスするときによく発生する問題です。

これらのファイルとフォルダはローカルデバイスに再同期する必要があります。今後シェルで処理するか、次を使用する必要があります。常にこの端末にありますローカルで利用可能でスペースを最適化するために削除されないようにするオプション。

関連情報