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


17

而不是使用以下命令:

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

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

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

可能吗?

Answers:


17

我认为您应该像GUI应用程序那样做。我这样做的想法是为“复制”和“粘贴”编写两个函数,其中“复制”将要复制的文件的路径写入临时文件,“粘贴”读取这些路径并仅调用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
}

可以编写更好的脚本来实现此想法,我测试了自己的脚本,它对文件和文件夹非常有效(我不知道如何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

1
这就像一个魅力!
Meysam '02

2
我喜欢这个主意。只需进行少量修改,您甚至可以实现“剪切”功能。
Pablo Venturino 2012年

@吉尔斯您能解释一下为什么替换echoprintf吗?
Meysam '02

@Meysam即使在shopt -s xpg_echo
吉尔(Gilles)'所以

1
@Meysam printf是便携式的,安全echo的不是。Wooledge Wiki 简短地提到了这一点。
jw013

10

我建议xclip。我一直在用它。但您不需要脚本。只是使用功能。

我认为不需要使用这些脚本,特别是因为如果您正在做我想做的事情,您会发现已经提到的脚本(在有用的linux tidbits博客上)很烦人,因为它们会在可能的情况下提示您输入信息,使用它们,这与Unix哲学相反。

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

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

file2clip () {
  cat $@ | xclip -selection clipboard
}

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


3

您可以xclip为此使用命令。您可以从此链接下载bash脚本,bash cp2clipbash clippaste.bashrc文件添加别名。


@别名是什么意思?
ixtmixilix 2012年

我的意思是将文件保留在您的主目录中,并在.bashrc别名中放置两个别名cp2clip ='bash / home / <用户名> /cp2clip.sh'和clippaste ='bash / home / <用户名> /clippaste.sh'这样您可以在任何地方使用它们。要了解有关别名的更多信息,请参见man aliaslinfo.org/alias.html
harish.venkat,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.