我有一个很长路径的文件,例如:
/opt/very/long/path/file1
我想复制这个目录中的文件:
cp /opt/very/long/path/file1 /opt/very/long/path/file2
我不想重复这条漫长的路。我可以转到目标文件夹并复制:
cd /opt/very/long/path/
cp file1 file2
但我不想更改目录。原因之一是:如果我有很多长路径,我每次都必须进入目录。
cd /opt/very/long/path/
cp file1 file2
cd /opt/other/very/very/long/path/
cp fileA fileB
另一个原因是:我想保留上下文和清晰的历史记录(每个命令都说明复制的内容和位置)。
因此,最好不要更改目录:
cp /opt/very/long/path/file1 /opt/very/long/path/file2
cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB
但我必须重复路径。
有这样的捷径吗?
cp /opt/very/long/path/file1 ./file2
cp /opt/other/very/very/long/path/fileA ./fileB
但点.
表示“当前目录”。有什么字符表示“目标目录”或“源目录”?
cp /opt/very/long/path/file1 <destination>/file2
cp /opt/other/very/very/long/path/fileA <destination>/fileB
答案1
大括号扩展对此很有用:
cp /opt/other/very/very/long/path/{fileA,fileB}
...将扩展到:
cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB
当它真正执行的时候。
该命令将在您键入命令时显示在您的历史记录中,这会保留路径:
$ history
# ...
508 cp /opt/other/very/very/long/path/{fileA,fileB}
509 history
答案2
您可以使用日志路径设置一个变量,并在 cp 命令中使用该变量。
例如
export dir="/opt/very/long/path"
cp "$dir"/file "$dir"/file2
答案3
如果您想在 2 个文件夹之间同步,可以使用 rsync。
rsync 也可用于在本地主机和远程主机中同步。
对于上面的场景,它是在 localhost 中使用的:
rsync -avzh sourcefolder destinationfolder
答案4
您可以输入:
cp /opt/other/very/very/long/path/fileA !#:1:h/fileB
它将在历史上扩展到:
cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB
解释:
!#
- 获取当前行:1
- 获取第一个参数:h
- 获取文件夹
(感谢本文)
缺点是:
- 您无法
up arrow
按 来获取您输入的命令,因为它在历史记录中保存了扩展, - 第二个文件名自动完成功能不起作用。