从命令行复制并粘贴文件/目录

B F*_*ley 17 command-line copy-paste file-copy

而不是使用以下命令:

cp {源文件} {目标文件}

我希望能够将文件复制到剪贴板,然后将其粘贴到另一个目录中的其他位置。像这样:

/usr/local/dir1# cp {源文件}
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# paste

是否可以?

sae*_*edn 17

我认为您应该像 GUI 应用程序那样做一些事情。我这样做的想法是为 Copy 和 Paste 编写两个函数,其中 Copy 将要复制的文件的路径写入临时文件,然后 Paste 读取这些路径并简单地调用cp命令。我的实现(要放入.bashrc文件)如下所示:

function Copy {
    touch ~/.clipfiles
    for i in "$@"; do
      if [[ $i != /* ]]; then i=$PWD/$i; fi
      i=${i//\\/\\\\}; i=${i//$'\n'/$'\\\n'}
      printf '%s\n' "$i"
    done >> ~/.clipfiles
}

function Paste {
    while IFS= read src; do
      cp -Rdp "$src" .
    done < ~/.clipfiles
    rm ~/.clipfiles
}
Run Code Online (Sandbox Code Playgroud)

可以编写更好的脚本来实现这个想法,我测试了自己的脚本,它对文件和文件夹非常有效(我不知道如何xclip复制文件夹!!)


例如:

/usr/local/dir1# Copy a.txt *.cpp
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy *.h *.cpp b.txt subdir1
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy a.txt b.txt 
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Copy c.txt d.txt
/usr/local/dir2# cd /usr/local/dir3
/usr/local/dir3# Paste
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个主意。只需稍加修改,您甚至可以实现“剪切”功能。 (2认同)

ixt*_*lix 10

我建议xclip。我一直为此使用它。但你不需要脚本。只使用函数。

我认为没有必要使用这些脚本,特别是,因为如果你正在做我认为你正在做的事情,你会发现已经提到的脚本(在有用的 linux 花絮博客上)很烦人,因为它们会尽可能提示你输入,只是使用它们,与 unix 哲学相反。

我建议只将一些函数写入您的.bashrc

clip2file () {
  xclip -out -selection clipboard >> $@
  echo -e "\n" >> $@
}

file2clip () {
  cat $@ | xclip -selection clipboard
}
Run Code Online (Sandbox Code Playgroud)

要使用这些,您需要apt-get install xclip(Debian、Ubuntu、Linux Mint 等)或zypper in xclip(openSUSE、其他基于 .rpm 的系统)或某些等效的。该程序应该可以在您使用的任何系统上使用。