# フォルダコマンド

### 概要

このページでは、フォルダやレコードの配置に関するコマンドをまとめています。現時点で扱う内容は以下のとおりです。

1. [フォルダ一覧](#list-folder-command)
2. [フォルダまたはレコードの移動](#move-folder-command)
3. [フォルダの削除](#remove-folder-command)
4. [ツリー表示](#tree-command)
5. [フォルダの作成](#make-directory-command)
6. [フォルダの更新](#update-folder-command)
7. [作業フォルダの変更](#change-directory-command)
8. [フォルダ詳細の取得 (PowerShell)](#get-keeper-folder-command)

### フォルダ一覧 <a href="#list-folder-command" id="list-folder-command"></a>

指定したUIDに紐づく情報を取得します。UIDはレコード、フォルダ、共有フォルダ、チームのいずれにも対応できます。JSON形式のほか、詳細リストとして出力できます。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `ls`

**フラグ:**

* `l` - 詳細表示

**例:**

```bash
My Vault> ls -l
  #  Folder UID              Name                           
---  ----------------------  -------------------------------
  1  folder_uid              Actest/                        
  2  folder_uid              ChecKRustWindows               
  3  folder_uid              Example-shared-folder          
  4  folder_uid              main_credentials_shared_folder 
  5  folder_uid              main_folder_for_init_test      
                      
```

</details>

<details>

<summary>DotNet SDK</summary>

DotNet SDKでは、指定したUIDをレコード・フォルダなど種類をまたいで検索する実装になっています。

```csharp
public bool TryGetFolder(string folderUid, out FolderNode node)
```

続いて、以下を使ってノードからサブフォルダとその配下のデータを取得します。

```csharp
var subFolders = node.Subfolders;
```

各サブフォルダの内容を参照できます。

</details>

<details>

<summary>PowerCommander</summary>

**コマンド:** `Get-KeeperFolders`

**別名:** `kfolders`

**パラメータ:**

* **`-Filter`** (string, optional) - 名前による絞り込み、ワイルドカード (`*` および `?`) 対応、例: `"Engineering*"`
* **`-Type`** (string, optional) - フォルダタイプによる絞り込み (`'All'` 既定、`'User'`、`'Shared'`)
* **`-IncludeRoot`** (switch, optional) - 結果にルートフォルダを含める
* **`-AsObject`** (switch, optional) - 整形表示ではなくパイプライン用オブジェクトを返す
* **`-Verbose`** (switch, optional) - フルパスを含む詳細情報の表示

**例:**

```powershell
PS> Get-KeeperFolders -Type Shared -IncludeRoot -Verbose          

Found 9 folder(s)

UID                    Name                           Type               Subfolders Records Path
---                    ----                           ----               ---------- ------- ----
Yi_OxwTV2tdBWi-_Aegs_w Demo Folder                    SharedFolder                1       4 /Demo Folder/
IjMo9BzlhPmZnGRQI8feYg My folder                      SharedFolderFolder          1       0 /Demo Folder/My folder/
FsCYGSOz71gkbcg7okedmQ My subfolder                   SharedFolderFolder          0       0 /My subfolder/
8N6xqMChTWAL-r_wIdzV8A my_share                       SharedFolder                1       2 /my_share/
jB6_X9sDvc2ZQy4rZtSt3A New Sub-Folder                 SharedFolderFolder          1       0 /New Sub-Folder/
Lp0G8YP3aDEj627K_I2_BA New Sub-Folder                 SharedFolderFolder          0       0 /Demo Folder/My folder/New Sub-Folder/
h0dtYN_8hpUWyeGHRj5jRA PowerCommanderCreatedFolder    SharedFolderFolder          0       0 /New Sub-Folder/PowerCommanderCreatedFolder/
kxR69Qfymrrx7SKtzpwFlg test_share_folder_folder       SharedFolderFolder          1       1 /my_share/test_share_folder_folder/
KjcKBnhzkVrgBVH6ujTlqA testrtg                        SharedFolderFolder          0       1 /my_share/test_share_folder_folder/testrtg/

```

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `ls`

**オプション:**

* `-l`, `--list` - リスト形式での出力
* `-f`, `--folders` - フォルダ名のみ出力
* `-r`, `--records` - レコードも出力
* `-v`, `--verbose` - 詳細出力

**例:**

```sh
My Vault> ls -l
  #  Flags    UID                     Name                                                      Type
---  -------  ----------------------  --------------------------------------------------------  -----------------
  1  f---     folder_uid              User-ks
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `get_folder`

```python
get_folder(self, folder_uid: str) -> Optional[vault_types.Folder]
```

**例:**

```python
 folder = vault.vault_data.get_folder(folder_uid)
```

</details>

### フォルダまたはレコードの移動 <a href="#move-folder-command" id="move-folder-command"></a>

ボルト内の別のフォルダへ、レコードまたはフォルダを移動します。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `mv`

**フラグ:**

* `--link` - 移動元を削除しない (リンク)
* `source record or folder (pos. 0)` (必須) - 移動元のレコードまたはフォルダ
* `destination folder (pos. 1)` (必須) - 移動先フォルダ

**例:**

```bash
My Vault> mv <source_record/source_folder> <destination_folder>
```

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
public async Task MoveFolder(string srcFolderUid, string dstFolderUid, bool link = false)
```

**引数:**

`srcFolderUid` - 移動元フォルダの UID

`dstFolderUid` - 移動先フォルダの UID

`link` - `true` のときは移動元を残し移動先へリンク、`false` のときは移動元から切り離して移動先へ移動

</details>

<details>

<summary>PowerCommander</summary>

**コマンド:** `Move-RecordToFolder`

**別名:** `kmv`

**フラグ:**

* `-Records` - 移動するレコードの UID
* `-Folder` - 移動先フォルダの UID
* `-Link` - 移動元を残すリンク操作

**例:**

```powershell
PS> Move-RecordToFolder -Records record_uid -Folder folder_uid
```

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `mv`

**パラメータ:** 必須

* `Source pos 0` (必須) - 移動元フォルダまたはレコードの UID またはパス
* `Destination pos 1` (必須) - 移動先フォルダの UID またはパス

**オプション:**

* `-l`, `--link` - 移動元を削除しない
* `-f`, `--force` - 確認プロンプトを出さない
* `-R`, `--recursive` - 検索パターンをフォルダにも適用
* `-s`, `--can-reshare {on, off}` - 「共有可」レコード権限の適用
* `-e`, `--can-edit {on, off}` - 「編集可」レコード権限の適用

**例:**

```bash
My Vault> mv <source_record/source_folder> <destination_folder>
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `move_vault_objects`

**例:**

```python
# source_uids にはフォルダの UID、record_paths にはレコードパスを渡す
record_management.move_vault_objects(
     context.vault,
     src_objects=itertools.chain(source_uids, record_paths),
     dst_folder_uid=dst_folder.folder_uid,
     is_link=kwargs.get('link') is True,
     can_edit=can_edit, 
     can_share=can_share,
     on_warning=on_warning)
```

</details>

### フォルダの削除 <a href="#remove-folder-command" id="remove-folder-command"></a>

指定したフォルダをボルトから削除します。共有フォルダでは、レコードの参照がなくなったタイミングで所有者のゴミ箱へ移る場合があります。CLIの確認メッセージに従って操作してください。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `rmdir`

**フラグ:**

* `(pos. 0)` - 削除するフォルダ名または UID

**例:**

```bash
My Vault> rmdir some_new_folder/
1 Shared Folder(s) will be deleted.
Note: If the last reference to a record is removed, the record can be found in the owner's trash can. If the trash can is then emptied, the record is no longer recoverable.
Type "yes" to confirm, <Enter> to cancel
> yes

```

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
public Task DeleteFolder(string folderUid)
```

**引数:**

`folderUid` - 削除対象フォルダの UID

</details>

<details>

<summary>PowerCommander</summary>

**コマンド:**

```powershell
PS> Remove-KeeperFolder test_folder_for_delete 
```

**フラグ:**

`Name` - 削除するフォルダの名前または UID

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `rmdir`

**パラメータ:**

* `folder` - 削除するフォルダのパスまたは UID (必須)

**オプション:**

* `-f`, `--force` - 確認プロンプトの省略
* `-q`, `--quiet` - 削除中のフォルダ情報を表示しない

**例:**

```bash
My Vault> rmdir deleted_folder

The following folder(s) will be removed:
deleted_folder

1 Personal Folder(s) will be deleted.
Note: If the last reference to a record is removed, the record can be found in the owner's trash can. If the trash can is then emptied, the record is no longer recoverable.
 
Do you want to proceed with the folder deletion? [y/n]: y
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `delete_vault_objects`

```python
 delete_vault_objects(vault: vault_online.VaultOnline,
                         vault_objects: Iterable[Union[str, vault_types.RecordPath]],
                         confirm: Optional[Callable[[str], bool]]=None) -> None:
```

**例:**

```python
 record_management.delete_vault_objects(context.vault, list(folder_uids), delete_confirmation)
```

</details>

### ツリー表示 <a href="#tree-command" id="tree-command"></a>

ボルト内のフォルダとレコードの階層を、Unix の `tree` コマンドに近いツリー形式で表示します。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `tree`

**フラグ:**

* `folder (pos. 0)` - 起点フォルダのパスまたは UID

**例:**

```bash
My Vault> tree

My Vault
 +-- New Test Folder
 |   +-- example-normal-folder
 |       +-- test-example-subfolder
```

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:** 非対応

</details>

<details>

<summary>PowerCommander</summary>

**コマンド:** 近日公開

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `tree`

**オプション:**

* `-v`, `--verbose` - 名前に加え内部 ID (フォルダ UID など) の表示
* `-r`, `--records` - 各フォルダ内レコードの表示
* `-s`, `--shares` - 共有フォルダの共有権限の詳細表示
* `-hk`, `--hide-shares-key` - 共有権限の凡例を非表示 (`--shares` 併用時のみ有効、既定は `--shares` 時に凡例あり)
* `-t`, `--title` - ツリー出力の先頭に任意タイトルを表示
* `folder` - 起点フォルダのパスまたは UID、省略時はルート

**例:**

```bash
My Vault> tree "Test-normal-folder"
Test-normal-folder
 +-- example-folder
 +-- Shared-Folder-Example [Shared]
 +-- Test PowerCommander Folder [Shared]
```

</details>

<details>

<summary>Python SDK</summary>

**メソッド:** 非対応

</details>

### フォルダの作成 <a href="#make-directory-command" id="make-directory-command"></a>

レコードや別フォルダを整理するため、Keeperボルト内に新しいフォルダを作成します。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `mkdir`

**フラグ:**

* `folder name` (必須) - 作成するフォルダ名
* `-s`, `--shared` (既定: `false`) - 共有フォルダとして作成
* `--manage-users` - ユーザー管理権限の既定 (`true` / `false`、既定 `false`)
* `--manage-records` - レコード管理権限の既定 (`true` / `false`、既定 `false`)
* `--can-share` - 共有権限の既定 (`true` / `false`、既定 `false`)
* `--can-edit` - 編集権限の既定 (`true` / `false`、既定 `false`)

**例:**

```bash
My Vault>  mkdir -s "Test-Dotnet-Cli-Folder" --manage-users true  --manage-records true --can-share true  --can-edit true
```

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
Task<FolderNode> CreateFolder(string name, string parentFolderUid = null,
            SharedFolderOptions sharedFolderOptions = null);
```

**引数:**

`name` - 作成するフォルダ名 (フォルダレコードのタイトル)

`parentFolderUid` - 親フォルダの UID

**SharedFolderOptions:**

`ManageUsers` - ユーザー管理権限の既定 (`true` / `false`、既定 `false`)

`ManageRecords` - レコード管理権限の既定 (`true` / `false`、既定 `false`)

`CanShare` - 共有権限の既定 (`true` / `false`、既定 `false`)

`CanEdit` - 編集権限の既定 (`true` / `false`、既定 `false`)

</details>

<details>

<summary>PowerCommander</summary>

**コマンド:** `Add-KeeperFolder` または `kmkdir`

**フラグ:**

* `-Name` - 作成するフォルダ名
* `-ParentFolderUid` - 親フォルダの UID
* `-Shared` - 共有フォルダとして作成する場合は `true`、通常フォルダは `false`
* `-CanEdit` - 編集権限の既定 (`true` / `false`、既定 `false`)
* `-CanShare` - 共有権限の既定 (`true` / `false`、既定 `false`)
* `-ManageUsers` - ユーザー管理権限の既定 (`true` / `false`、既定 `false`)
* `-ManageRecords` - レコード管理権限の既定 (`true` / `false`、既定 `false`)

**例:**

```powershell
PS> Add-KeeperFolder -Name "Test PowerCommander Folder" -ParentFolderUid folder_uid -Shared -CanEdit -CanShare 

FolderUid     Name            FolderType     ParentUid           SubfolderCount   RecordCount
                                                                                                     t
---------     ----            ----------     ---------           --------------   ----------
Folder UID    Test Folder     SharedFolder   Parent_folder_uid    0               0
```

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `mkdir`

**パラメータ:**

* `folder` - フォルダ名 (必須)

**オプション:**

* `-sf`, `--shared-folder` - 共有フォルダとして作成
* `-uf`, `--user-folder` - ユーザーフォルダとして作成
* `-a`, `--all` - すべての権限を全員の既定にする
* `-u`, `--manage-users` - ユーザー管理を全員の既定にする
* `-r`, `--manage-records` - レコード管理を全員の既定にする
* `-s`, `--can-share` - 共有を全員の既定にする
* `-e`, `--can-edit` - 編集を全員の既定にする

**例:**

```bash
My Vault> mkdir -sf "Test-Python-Cli-Folder" -s -e
folder_uid  # 作成されたフォルダの UID
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `add_folder`

```python
add_folder(vault: vault_online.VaultOnline, folder_name: str, is_shared_folder: bool=False,
               parent_uid: Optional[str]=None, manage_records: Optional[bool]=None, manage_users: Optional[bool]=None,
               can_share: Optional[bool]=None, can_edit: Optional[bool]=None)
```

**例:**

```python
folder_uid = folder_management.add_folder(
                context.vault, folder_name, is_shared_folder, base_folder.folder_uid, manage_users, manage_records, can_edit, can_share)
```

</details>

### フォルダの更新 <a href="#update-folder-command" id="update-folder-command"></a>

既存のフォルダを編集します。UID または名前で対象を特定し、共有フォルダの場合は権限オプションを変更できます。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `update-dir`

**フラグ:**

* `--name` - 新しいフォルダ名 (リネーム)
* `--manage-users` - ユーザー管理権限の既定 (`true` / `false`、既定 `false`)
* `--manage-records` - レコード管理権限の既定 (`true` / `false`、既定 `false`)
* `--can-share` - 共有権限の既定 (`true` / `false`、既定 `false`)
* `--can-edit` - 編集権限の既定 (`true` / `false`、既定 `false`)

**例:**

```bash
My Vault>  update-dir "Old Folder Name" --name "New Project Folder" --can-edit true --can-share true --manage-users true --manage-records true
```

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
Task<FolderNode> UpdateFolder(string folderUid, string newName, SharedFolderOptions sharedFolderOptions = null);
```

**引数:**

`folderUid` - 対象フォルダの UID

`newName` - 新しいフォルダ名 (リネーム)

**SharedFolderOptions:**

`ManageUsers` - ユーザー管理権限の既定 (`true` / `false`、既定 `false`)

`ManageRecords` - レコード管理権限の既定 (`true` / `false`、既定 `false`)

`CanShare` - 共有権限の既定 (`true` / `false`、既定 `false`)

`CanEdit` - 編集権限の既定 (`true` / `false`、既定 `false`)

</details>

<details>

<summary>PowerCommander</summary>

**コマンド:** `Edit-KeeperFolder`

**フラグ:**

* `-Uid` - 編集対象フォルダの UID または名前
* `-Name` - 新しいフォルダ名 (リネーム)
* `-Shared` - 共有フォルダにする場合は `true`、通常フォルダは `false`
* `-CanEdit` - 編集権限の既定 (`true` / `false`、既定 `false`)
* `-CanShare` - 共有権限の既定 (`true` / `false`、既定 `false`)
* `-ManageUsers` - ユーザー管理権限の既定 (`true` / `false`、既定 `false`)
* `-ManageRecords` - レコード管理権限の既定 (`true` / `false`、既定 `false`)

**例:**

```powershell
PS> Edit-KeeperFolder -Uid QpR86NvOnfvGYf_urfltFw  -Name A122

FolderUid              Name FolderType ParentUid SubfolderCount RecordCount
---------              ---- ---------- --------- -------------- -----------
QpR86NvOnfvGYf_urfltFw A122 UserFolder           0              0
```

</details>

<details>

<summary>Python CLI</summary>

フォルダの更新は、`mv` や `rmdir`、`transform-folder` など、複数コマンドの組み合わせで行います。

**コマンド:** `rndir`

**パラメータ:**

* <kbd>folder</kbd> - フォルダのパスまたは UID

**フラグ:**

* <kbd>-n</kbd>, <kbd>--name</kbd> - 新しいフォルダ名
* <kbd>-q</kbd>, <kbd>--quiet</kbd> - フォルダ情報を出さずにリネーム

**例:**

```powershell
My Vault> rndir xXXx0xxxXxXXxX0xXXxxXX -n New
Folder "Records" has been renamed to "New"
```

</details>

<details>

<summary>Python SDK</summary>

```python
from keepersdk.vault import folder_management

def update_folder(vault: vault_online.VaultOnline, folder_uid: str, folder_name: Optional[str]=None,
                  manage_records: Optional[bool]=None, manage_users: Optional[bool]=None,
                  can_share: Optional[bool]=None, can_edit: Optional[bool]=None) -> None:

```

</details>

### 作業フォルダの変更 <a href="#change-directory-command" id="change-directory-command"></a>

Keeperではレコードとフォルダを階層で整理します。このコマンドは、コマンダー上の「現在のフォルダ」(作業ディレクトリ) を切り替えます。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `cd`

**フラグ:**

* `folder destination or Uid` - 移動先フォルダのパスまたは UID

**例:**

```bash
My Vault> cd Test-Dotnet-Cli-Folder

My Vault/Test-Dotnet-Cli-Folder> 
```

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:** 専用APIはありません。以下の手順で、作業フォルダに相当する値を設定します。

**例:**

1. ユーザーからフォルダの UID または名前を取得する
2. `TryResolvePath` でパスを解決し、存在すれば結果を `node` に格納する
3. `node` が null でなければ、その `FolderUid` を現在のボルトフォルダとする

<pre class="language-csharp"><code class="lang-csharp">vault.TryResolvePath(name, out var node)
<strong>vault.CurrentFolder = node.FolderUid;
</strong></code></pre>

</details>

<details>

<summary>PowerCommander</summary>

**コマンド:** `Set-KeeperLocation` または `kcd`

**フラグ:**

* `-Path` - 移動先フォルダへのパス (名前のみでも可)

**例:**

```powershell
PS> Set-KeeperLocation /Test-normal-folder
```

**コマンド:** `Get-KeeperLocation`

**例:**

```powershell
PS> Get-KeeperLocation

Path
----
\
```

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `cd`

**パラメータ:**

* `FOLDER` - フォルダのパスまたは UID (必須)

**例:**

```bash
My Vault> cd folder_uid
My Vault/Test-Python-Cli-Folder>
```

</details>

<details>

<summary>Python SDK</summary>

**メソッド:** 非対応

</details>

### フォルダ詳細の取得 (PowerShell) <a href="#get-keeper-folder-command" id="get-keeper-folder-command"></a>

<details>

<summary>PowerCommander</summary>

**コマンド:** `Get-KeeperFolder`

指定したフォルダの詳細を取得します。

**フラグ:**

`Uid` - 詳細を表示するフォルダの UID

**使い方:**

```
PS> Get-KeeperFolder abcdefg(uid)
PS> Get-KeeperFolder abcdefg(uid) -AsObject
```

**例:**

```
PS> Get-KeeperFolder _56dJ6GUKYDSp4NfRomIaa

    Folder UID          : _56dJ6GUKYDSp4NfRomIaa
    Folder Type         : SharedFolder
    Name                : ChecK123455
    Shared Folder UID   : _56dJ6GUKYDSp4NfRomIaa
    Full Path           : /ChecK123455/
    Subfolders          : 2
    Records             : 10
```

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/commander-sdk/keeper-commander-sdks/sdk-command-reference/folder-commands.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
