如何简单地重新创建像在 GUI 环境中那样的复制/粘贴功能?
我在 Linux 控制台中复制文件/目录的典型场景是:
cp source_path target_path
有时路径是相对的,有时是绝对的,但我需要同时提供它们。它可以工作,但在某些情况下,我想从 GUI 重新创建场景,即:
1. go to source directory
2. copy file/directory
3. go to target directory
4. paste file/directory
我想象
cd source_directory_path
copy_to_stash source_name
cd target_directory_path
paste_from_stash [optional_new_target_name]
我知道有一个 xclip 应用程序,但文档说它复制的是文件内容,而不是文件句柄。此外,我可以$OLDPWD
在复制文件时使用变量并对其进行扩展,但这不是一个没有麻烦的解决方案。
有没有一些简单、通用、仅使用键盘且使用起来不尴尬的等效程序?我不想使用其他管理器,如 ranger、midnight commander,只想使用 cli。
答案1
您应该能够使用一些基本函数和 shell 的 $PWD 变量来获取绝对路径,以保存您指定的名称,然后将其复制到您所在的任何地方。以下是两个适用于 bash 的函数(dash/sh 可能只需要使用test
或 而[
不是[[
):
#!/bin/bash
# source me with one of:
# source [file]
# . [file]
# Initialize
sa_file=
sa(){
# Fuction to save a file in the current PWD
if [[ -e "$PWD/$1" ]]; then
sa_file=$PWD/$1
echo "Saved for later: $sa_file"
else
echo "Error: file $PWD/$1 does not exist"
fi
}
pa(){
# Paste if file exists, to $1 if exists
if [[ -e "$sa_file" ]]; then
if [[ $1 ]]; then
cp -v "$sa_file" "$1"
else
cp -v "$sa_file" .
fi
else
echo "Error: file $sa_file does not exist, could not copy"
fi
}
我使用了保存的名称sa
,并pa
粘贴了 [因为打字越少=越好,对吧?] 但将其命名为任何名称都可以,例如 copy_to_stash。
答案2
您可以使用xclip
复制并粘贴路径到文件。
cd source_directory_path
realpath some_file | xclip # Copy the path to a file
cd target_directory_path
cp "$(xclip -o)" . # Copy ("paste") the file to the current directory