Почему эти аргументы фильтра rsync не работают в bash при передаче в массиве?

XDG _RUNTIME _DIR является одним из стандартных каталогов, определенных Спецификация базового каталога XDG(freedesktop.org)

$XDG_RUNTIME_DIR defines the base directory relative to which user-specific non-essential runtime files and other file objects (such as sockets, named pipes,...) should be stored. The directory MUST be owned by the user, and he MUST be the only one having read and write access to it. Its Unix access mode MUST be 0700.

По сути, это -пользовательский каталог временных файлов, который используется XDG (Freedesktop.Org )совместимыми приложениями.

В Debian эта переменная обычно устанавливается модулем pam _systemd PAM при интерактивном входе в систему.

$XDG_RUNTIME_DIR

Path to a user-private user-writable directory that is bound to the user login time on the machine. It is automatically created the first time a user logs in and removed on the user's final logout. If a user logs in once, then logs out again, and logs in again, the directory contents will have been lost in between, but applications should not rely on this behavior and must be able to deal with stale files. ...

$XDG_RUNTIME_DIR is not set if the current user is not the original user of the session.

но он не применяется при запуске приложения с sudo , из-за чего ваше приложение (dolphin )его не видит.

Затем он правильно обнаружит это:

 QString xdgRuntimeDir = QFile::decodeName(qgetenv("XDG_RUNTIME_DIR"));
 if (xdgRuntimeDir.isEmpty()) {
     const QString userName = QFileSystemEngine::resolveUserName(myUid);
     xdgRuntimeDir = QDir::tempPath() + QLatin1String("/runtime-") + userName;
        //...
     qWarning("QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '%s'", qPrintable(xdgRuntimeDir));
 } 

выберите разумное значение по умолчанию и выдайте предупреждение (, а не ошибку ).

Обратите внимание, что повторное использование существующего XDG _RUNTIME _DIR было бы неправильным, так как это временный каталог для -пользователя и наличие приложения, работающего как другой user, получить к нему доступ, скорее всего, приведет к нарушению прав доступа к файлам и может испортить существующий сеанс.

Так что это не то, что вы должны пытаться "исправить".

Также обратите внимание, что обычно следует использовать gksudoили kdesudoдля запуска графических приложений по причинам, описанным здесь .

0
08.11.2019, 11:15
1 ответ

Часть ваших rsyncфильтров, а также исходный и целевой каталоги заключаются в дополнительные экранированные кавычки. Удалите экранированные кавычки, и все должно работать:

options=(
  -av --prune-empty-dirs 
  -f "- *.flac" 
  -f "- *.WMA" 
  -f "- *.wma" 
  -f "- *.ogg" 
  -f "- *.mp4" 
  -f "- *.m4a" 
  -f "- *.webm" 
  -f "- *.wav" 
  -f "- *.ape" 
  -f "- *.zip" 
  -f "- *.rar"
)
dir="/media/test/Ahmad Jamal Trio/Live at the Pershing"
target_dir="/home/test/mp3/Ahmad Jamal Trio/Live at the Pershing"
rsync "${options[@]}" "$dir/" "$target_dir"

Я удалил косые черты в конце переменных dirи target_dir, /уже добавлен к $dirв вызове rsync.

3
28.01.2020, 02:22

Теги

Похожие вопросы