Простое решение ошибки
#!/bin/sh
for last; do : ; done
while [ $# -gt 1 ]; do
mkdir -p "${last}/$(dirname "$1")"
cp --parents "$1" "$last"
shift
done
Это зависит от вашей среды рабочего стола:
Если вы используете оконный менеджер, вы можете использовать различные инструменты для отображения элементов на рабочем столе, например. Рабочий стол PCmanFM .
Большинство инструментов и окружений рабочего стола учитывают ваши настройки xdg -user -dir DESKTOP.
Как правило, в GNU/Linux (, как и в Unix ), каталог рабочего стола пользователя можно указать с помощью ~/Desktop
. Сокращение ~/
будет расширяться до любого домашнего каталога, например /path/to/home/username
.
Следует пояснить, что большинство снарядов (, например. bash, ksh, csh и т. д. )расширит ~
до домашнего каталога, но не все из них (, например. rc ). Тильда — буквальный символ, так что вы можете иметь файл ~filename
; следовательно, оболочка должна быть рассчитана на расширение тильды при определенных условиях.
Каталог рабочего стола зависит от языка системы. Добавляя к параметрам, указанным для другого человека, вы можете найти файл ~/.config/users -dirs.dirs
Пример, когда вы можете прочитать содержимое:
cat ~/.config/users-dirs.dirs
В моей машине показано это:
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/Escritorio"
XDG_DOWNLOAD_DIR="$HOME/Descargas"
XDG_TEMPLATES_DIR="$HOME/Plantillas"
XDG_PUBLICSHARE_DIR="$HOME/Público"
XDG_DOCUMENTS_DIR="$HOME/Documentos"
XDG_MUSIC_DIR="$HOME/Música"
XDG_PICTURES_DIR="$HOME/Imágenes"
XDG_VIDEOS_DIR="$HOME/Vídeos"
Мой каталог на рабочем столе выглядит так: :"$HOME/Escritorio", где $HOME – это переменная среды, которая ссылается на вашу домашнюю папку. На практике:
cd ~/Escritorio
# is the same
cd "$HOME/Escritorio"
Если вы хотите получить каталог рабочего стола с помощью программирования, вы можете прочитать файл и проанализировать его содержимое. Например, посмотрите мой код javascript для получения каталога рабочего стола:
async getLinuxDesktop(){
let file = Path.join(Os.homedir(), ".config", "user-dirs.dirs")
let data = {}
if(fs.existsSync(file)){
let content = await fs.readFileAsync(file,"utf8")
let lines = content.split(/\r?\n/g).filter((a)=> !a.startsWith("#"))
for(let line of lines){
let i = line.indexOf("=")
if(i >= 0){
try{
data[line.substring(0,i)] = JSON.parse(line.substring(i + 1))
}catch(e){}
}
}
}
if(data["XDG_DESKTOP_DIR"]){
let desktop = data["XDG_DESKTOP_DIR"]
desktop = desktop.replace(/\$([A-Za-z\-\_]+)|\$\{([^\{^\}]+)\}/g, (_, a, b) => (process.env[a || b] || ""))
return desktop
}else{
return Path.join(Os.homedir(),"Desktop")
}
}