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
}
如何像在 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
}