Move File
Actionarrow.right.doc.on.clipboard
action.move_file
Move or copy a file to a new destination. The source file path comes from the upstream payload (typically {{filePath}} from a File Changed trigger). The destination supports interpolation for dynamic paths. Intermediate directories are created automatically when enabled.
This node acts on a single file by default. If the source path resolves to a folder, the node refuses with an error — turn on Allow Folders to move or copy a folder instead. A package like .app or .numbers is technically a folder on disk, but Finder shows it as a single file, and this node treats it the same way — it's never refused as a folder, with or without Allow Folders.
Destructive action
When mode is set to Move with Overwrite enabled (the default), an existing file at the destination path is silently removed before the source replaces it. If a folder already exists at the destination, Overwrite never removes it — the move fails instead of clobbering a folder with a file. Pair with a Condition node if you want a non-destructive fallback. Workflows configured this way prompt for confirmation on every arm.
Ports
| Direction | Name | Data Type | Description |
|---|---|---|---|
| Input | Input | Any | Payload with source file path |
| Output | Output | Any | Payload with move/copy result |
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
| destination | Text | — | Destination path. Supports {{var}} (e.g., {{userInput}}/{{fileName}}). |
| mode | Dropdown | move | Operation mode: Move or Copy |
| overwrite | Boolean | true | Overwrite if file already exists at destination |
| createDirectories | Boolean | true | Create intermediate directories if they do not exist |
| allowFolders | Boolean | false | Allow the source to be a folder instead of a single file. |
Output Variables
| Variable | Type | Description |
|---|---|---|
| sourcePath | String | Original file path |
| destPath | String | New file path after move/copy |
| fileName | String | Name of the file |
| fileSize | Number | File size in bytes |
Safety
Both the source and destination paths are resolved through the standard safety checks before any file is touched. Paths that resolve to protected locations — ~/Library/, ~/.ssh/, ~/.config/, ~/.aws/, and system roots such as /System, /etc, /var, and /usr — are refused, and .. traversal is rejected. A blocked source returns a failure with Refused unsafe move source; a blocked destination is refused the same way.
This node also works on a single file by default: a source that resolves to a folder is refused unless Allow Folders is turned on — that toggle governs the source only. If a folder already exists at the destination, Overwrite never removes it, regardless of Allow Folders — but a package such as .app or .numbers counts as a file here too, so one already at the destination is replaced like any ordinary file when Overwrite is on. Even with Allow Folders on, your home folder and its top-level folders — Desktop, Downloads, Documents, Pictures, Movies, and Music — are never accepted as a source; that protects the folders themselves, not what's inside them — a file in Downloads is an ordinary source like any other.
As of v1.3.0 the source path is validated too, matching Delete File and Move to Trash. Earlier versions validated only the destination, so a Copy could read from a protected location. Everyday moves within Downloads, Desktop, Documents, and your project folders are unaffected.
Example
Sort downloads by file extension: