realpath — Print the resolved file name.
| Use Case | Command | Description |
|---|---|---|
| 🔗 Resolve symbolic links to absolute path | realpath FILE | Expands all symlinks, resolves ., .., and extra / |
| ✅ Ensure all components exist | realpath -e FILE | Fail if any component is missing or unavailable |
| ❓ Treat missing components as directories | realpath -m FILE | Allow missing path components (treat as directory) |
| 📂 Get relative path from a directory | realpath --relative-to=DIR FILE | Print resolved path relative to DIR |
| 🔀 Conditional relative/absolute | realpath --relative-base=DIR FILE | Relative if under DIR, else absolute |
| 🔇 Suppress errors | realpath -q FILE | Suppress diagnostic messages for missing files |
| 🔗 No symlink resolution | realpath -s FILE | Only resolve ., .., and extra / |
realpath expands all symbolic links and resolves references to
/./, /../ and extra / characters.
By default, all but the last component of the specified files must exist.
realpath [OPTION]... FILE...
The file name canonicalization functionality overlaps with that of the
readlink command. This is the preferred command for
canonicalization as it's a more suitable and standard name. In addition
this command supports relative file name processing functionality.
-e / --canonicalize-existing — ✅ Ensure that all components of the specified file names exist. If any component is missing or unavailable, realpath will output a diagnostic unless the -q option is specified, and exit with a nonzero exit code. A trailing slash requires that the name resolve to a directory.-m / --canonicalize-missing — ❓ If any component of a specified file name is missing or unavailable, treat it as a directory.-L / --logical — 🔗 Symbolic links are resolved in the specified file names, but they are resolved after any subsequent .. components are processed.-P / --physical — 🧱 Symbolic links are resolved in the specified file names, and they are resolved before any subsequent .. components are processed. This is the default mode of operation.-q / --quiet — 🔇 Suppress diagnostic messages for specified file names.--relative-to=DIR — 📂 Print the resolved file names relative to the specified directory. Note this option honors the -m and -e options pertaining to file existence.--relative-base=DIR — 🏠 Print the resolved file names as relative if the files are descendants of DIR. Otherwise, print the resolved file names as absolute. Note this option honors the -m and -e options pertaining to file existence. For details about combining --relative-to and --relative-base, see Realpath usage examples.-s / --strip / --no-symlinks — 🚫 Do not resolve symbolic links. Only resolve references to /./, /../ and remove extra / characters. When combined with the -m option, realpath operates only on the file name, and does not touch any actual file.-z / --zero — ␀ Output a zero byte (ASCII NUL) at the end of each line, rather than a newline. This option enables other programs to parse the output even when that output would contain data with embedded newlines.By default, realpath prints the absolute file name of given files (symlinks are resolved, words is resolved to american-english):
cd /home/user
realpath /usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
=> /usr/bin/sort
=> /tmp/foo
=> /usr/share/dict/american-english
=> /home/user/1.txt
With --relative-to, file names are printed relative to the given directory:
realpath --relative-to=/usr/bin \
/usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
=> sort
=> ../../tmp/foo
=> ../share/dict/american-english
=> ../../home/user/1.txt
With --relative-base, relative file names are printed if the resolved file name is below the given base directory. For files outside the base directory absolute file names are printed:
realpath --relative-base=/usr \
/usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
=> bin/sort
=> /tmp/foo
=> share/dict/american-english
=> /home/user/1.txt
When both --relative-to=DIR1 and --relative-base=DIR2 are used, file names are printed relative to DIR1 if they are located below DIR2. If the files are not below DIR2, they are printed as absolute file names:
realpath --relative-to=/usr/bin --relative-base=/usr \
/usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
=> sort
=> /tmp/foo
=> ../share/dict/american-english
=> /home/user/1.txt
When both --relative-to=DIR1 and --relative-base=DIR2 are used, DIR1 must be a subdirectory of DIR2. Otherwise, realpath prints absolute file names.
Generated by phpman v4.9.26-1-g511901d · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-07-31 09:10 @216.73.217.152
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Enhanced by LLM: deepseek-v4-flash / taotoken.net / www.chedong.com - original format