背景:我正在浏览文件夹并查找我需要的文件。我想将文件复制到某个地方,然后将它们放在其他地方。但我不想费力找出源和目标的相对路径。
基本上,我想要一些类似于我在文件资源管理器中可以做的事情(选择文件、复制、粘贴到其他地方)。因此,工作流程如下...
cd some/crazy/directory/with/too/long/a/name
copy file
cd ~/some/other/place
paste
答案1
bash 中没有内置命令可以执行此操作。但是,有一个脚本(一个函数和一个别名)可以放入 .bashrc 中,从而为您提供此功能。
详细信息如下:http://www.webupd8.org/2010/10/copy-paste-files-from-command-line-bash.html
并且是:
ccopy(){ for i in $*; do cp -a $i /tmp/ccopy.$i; done }
alias cpaste="ls -d /tmp/ccopy* | sed 's|[^\.]*.\.||' | xargs -I % mv /tmp/ccopy.% ./%"
正如网站上的描述所说,只需将这两行添加到 .bashrc 中,然后就可以使用 ccopy 将文件添加到要复制的文件列表中,然后使用 cpaste 将它们粘贴到目标位置。您还可以通过查看 /tmp/ccopy* 来“管理”文件列表。
笔记- 此脚本仅限于具有“正常”名称的常规文件。它明确不处理文件名中的“空格”,也不会复制/粘贴文件夹。链接的文章有一个链接到一个可以处理文件夹的版本,但我不知道该版本是否可以处理文件/文件夹名称中的空格或非常规字符。我的大部分(Linux)工作都是从命令行完成的,所以这个版本满足了我的用例。
答案2
即使您不想使用@PJC 建议的脚本,您也可以使用它的主要思想:首先将文件复制到/tmp
,然后从那里获取:
cd some/crazy/directory/with/too/long/a/name
cp file /tmp
cd ~/some/other/place
cp /tmp/file .
它并不能完全解决问题:你必须重新输入文件名,但至少不需要输入路径。我懒的时候就用它。
答案3
您可以将文件名分配给变量。readlink -f
将为您提供/absolute/path/to/file。
cd some/crazy/directory/with/too/long/a/name
copy="$(readlink -f file)"
cd ~/some/other/place
cp "$copy" newfile
当然,这每次只能对一个文件起作用。