复制目标文件夹中的文件

复制目标文件夹中的文件

我有一个很长路径的文件,例如:

/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按 来获取您输入的命令,因为它在历史记录中保存了扩展,
  • 第二个文件名自动完成功能不起作用。

相关内容