forked from TrueCloudLab/restic
Merge pull request #2022 from moritzdietz/update-faq
Add example to spot path expansion errors
This commit is contained in:
commit
de9136b29f
1 changed files with 48 additions and 0 deletions
48
doc/faq.rst
48
doc/faq.rst
|
@ -27,6 +27,54 @@ strictly necessary. With high probability this is duplicate data. In
|
||||||
order to clean it up, the command ``restic prune`` can be used. The
|
order to clean it up, the command ``restic prune`` can be used. The
|
||||||
cause of this bug is not yet known.
|
cause of this bug is not yet known.
|
||||||
|
|
||||||
|
I ran a ``restic`` command but it is not working as intented, what do I do now?
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
If you are running a restic command and it is not working as you hoped it would,
|
||||||
|
there is an easy way of checking how your shell interpreted the command you are trying to run.
|
||||||
|
|
||||||
|
Here is an example of a mistake in a backup command that results in the command not working as expected.
|
||||||
|
A user wants to run the following ``restic backup`` command
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ restic backup --exclude "~/documents" ~
|
||||||
|
|
||||||
|
.. important:: This command contains an intentional user error described in this paragraph.
|
||||||
|
|
||||||
|
This command will result in a complete backup of the current logged in user's home directory and it won't exclude the folder ``~/documents/`` - which is not what the user wanted to achieve.
|
||||||
|
The problem is how the path to ``~/documents`` is passed to restic.
|
||||||
|
|
||||||
|
In order to spot an issue like this, you can make use of the following ruby command preceeding your restic command.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ ruby -e 'puts ARGV.inspect' restic backup --exclude "~/documents" ~
|
||||||
|
["restic", "backup", "--exclude", "~/documents", "/home/john"]
|
||||||
|
|
||||||
|
As you can see, the command outputs every argument you have passed to the shell. This is what restic sees when you run your command.
|
||||||
|
The error here is that the tilde ``~`` in ``"~/documents"`` didn't get expanded as it is quoted.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ echo ~/documents
|
||||||
|
/home/john/documents
|
||||||
|
|
||||||
|
$ echo "~/documents"
|
||||||
|
~/document
|
||||||
|
|
||||||
|
$ echo "$HOME/documents"
|
||||||
|
/home/john/documents
|
||||||
|
|
||||||
|
Restic handles globbing and expansion in the following ways:
|
||||||
|
|
||||||
|
- Globbing is only expanded for lines read via ``--files-from``
|
||||||
|
- Environment variables are not expanded in the file read via ``--files-from``
|
||||||
|
- ``*`` is expanded for paths read via ``--files-from``
|
||||||
|
- E.g. For backup targets given to restic as arguments on the shell, neither glob expansion nor shell variable replacement is done. If restic is called as ``restic backup '*' '$HOME'``, it will try to backup the literal file(s)/dir(s) ``*`` and ``$HOME``
|
||||||
|
- Double-asterisk ``**`` only works in exclude patterns as this is a custom extension built into restic; the shell must not expand it
|
||||||
|
|
||||||
|
|
||||||
How can I specify encryption passwords automatically?
|
How can I specify encryption passwords automatically?
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue