Linux 控制台相当于 gui copy/paste file/directory 场景

Linux console equivalent to gui copy/paste file/directory scenario

如何像在 gui 环境中一样简单地重新创建 copy/paste 功能?

我在 Linux 控制台中复制 file/directory 的典型情况是:

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 变量并在复制文件时扩展它,但这不是一个没有一些麻烦的解决方案。

有没有一些简单的,通用的,只有键盘的,使用起来不尴尬?

一个选项:您可以使用鼠标复制粘贴文件名,使用终端仿真器(例如 Konsole 或 GNOME 终端)的复制粘贴功能,但这:1) 需要 GUI,因为终端仿真器软件 运行 在 GUI 中; 2) 嗯,需要鼠标。

另一种选择:利用shell 制表符补全。您仍然需要键入文件名,但不是全部。

第三个选项,这更接近于您在 GUI 文件资源管理器中的工作方式:使用基于 TUI 的文件资源管理器,例如双窗格风格的午夜指挥官。您可以使用箭头键(如果您打开 Lynx-like motion 设置,这是非常推荐的)来快速导航目录树。然后 select 个文件使用 Insert+-* 键,然后从一个窗格到另一个窗格的 copy/move 个文件。很方便。事实上,我花在 CLI 上的一半时间都花在了 MC 上。

在我看来,您唯一的选择是编写一个脚本来执行所有这些步骤。您可以通过将文件复制到 /tmp 目录,然后再次从中复制来轻松实现剪贴板功能。

这应该可以正常工作。 用法:脚本 [from] [to]

filename=$(basename "[=10=]")
tmpfile=/tmp/$filename.$RANDOM
cd $(dirname "[=10=]")
cp $tmpfile $filename
cd $(dirname "")
cp $tmpfile $(basename "")

我也在超级用户上问过同样的问题,我收到的答案对我来说已经足够好了。

简而言之:两个额外的脚本和临时变量来保存中间值。

下面是代码和 link 原始答案。

#!/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/" ]]; then
    sa_file=$PWD/
    echo "Saved for later: $sa_file"
else
    echo "Error: file $PWD/ does not exist"
fi
}


pa(){
# Paste if file exists, to  if exists
if [[ -e "$sa_file" ]]; then
    if [[  ]]; then
        cp -v "$sa_file" ""
    else
        cp -v "$sa_file" .
    fi
else
    echo "Error: file $sa_file does not exist, could not copy"
fi
}

https://superuser.com/a/1405953/614464