Существует множество примеров того, как копировать «содержимое» файла из командной строки с помощью xclip
или xsel
. Я ищу способ скопировать файл из командной строки и вставить его в проводник. Поэтому я буду использовать команду для копирования файла, а не только его содержимого, и использовать Ctrlvдля вставки его в UI.
обновлено
xclip-copyfile
и xclip-pastefile
работают близко к тому, что я ожидаю, но когда я запускаю xclip-copyfil
e, я могу вставить только с помощью xclip-pastefile
команды, а не с помощью графического интерфейса.
решение1
Я использую Nautilus в Ubuntu в качестве своего браузера файлов, поэтому не могу говорить за любой другой браузер.
Способ, которым Nautilus обрабатывает вставку файла через, Ctrl-v
довольно локален для Nautilus, т.е. Nautilus распознает только Ctrl-v каквставить файлв ответ накопировать файлкоманда, которая была отдана во времянаутилуссам по себе. Это означает, что вы не можете использовать Ctrl-v для вставки файла, путь к которому вы скопировали в другом приложении.
Однако, если вам это подходит, Ctrl+Shift+v можно привязать к скрипту, который работает под nautilus-scripts-manager
. С этим скриптом вы можете делать практически все, что захотите.
nautilus-scripts-manager
дает вам доступ к некоторой фундаментальной информации о текущем каталоге и о том, какие файлы/каталоги выбраны. Одна вещь, которая мне особенно нравится в "nautilus-scripts", это то, что он добавляет свои скрипты в File
пункт меню (а также в контекстное меню). Это позволяет вам установить привязку клавиш, которая является локальной дляНаутилус 3илиНаутилус 2.
Вот грубый пример, используя ваш уже упомянутый xclip-pastefiles
пример. Обратите внимание, что в его нынешнем виде он требует, чтобы вы настроили xclip-copyfiles
перед запуском этого Ctrl-Shift-vвставитьскрипт.
После запуска установки xclip-copyfiles
вам нужно только перейти в окно Nautilus, выбрать целевой каталог (или файл в этом каталоге) и нажать сочетание клавиш вашего скрипта:Ctrl-Shift-v
#!/bin/bash
# Note: `leafpad' is a simple text editor which doubles as a quick-and-easy testing messsage-box
dir=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |sed -n 1p)
if [[ -n "$dir" ]] ;then
# target dir from `Nautilus Scripts' (1st priority)
if [[ -e "$dir" ]] ;then
[[ -d "$dir" ]] || dir="${dir%/*}"
[[ -d "$dir" ]] || dir=
fi
else
# target dir from $1 (2nd priority)
dir="$1"
if [[ -e "$dir" ]] ;then
[[ -d "$dir" ]] || dir="${dir%/*}"
[[ -d "$dir" ]] || dir=
fi
fi
if [[ -z "$dir" ]] ;then
# target dir from clipboard (if not in $NAUTILUS_SCRIPT.. or $1)
dir="$(xclip -o -sel c)"
if [[ -e "$dir" ]] ;then
[[ -d "$dir" ]] || dir="${dir%/*}"
[[ -d "$dir" ]] || dir=
else
dir=
fi
fi
[[ -d "$dir" ]] || { echo "$(basename "$0"): target directory not found in clipboard" |leafpad; exit 1; }
{ cd "$dir"
echo "Current Directory:"
echo " $dir"
echo "======="
echo xclip-pastefile # run your command (`echo' is for testing)
} 2>&1 |leafpad