如何将文件复制到不同的目录,但使用另一个文件扩展名?

如何将文件复制到不同的目录,但使用另一个文件扩展名?

假设我有两个目录:origbackup。 Orig 包含该文件foo。我想将文件复制foo到备份目录,但扩展名为.txt.

答案1

cp /path/to/orig/foo /path/to/backup/foo.txt

cp将源文件作为其第一个参数,将目标文件作为其第二个参数。您可能习惯于简单地指定目标目录,这是允许的,但您也可以指定完整路径,以便同时重命名目标文件。


cp命令有两种调用方式,源文件和目标目录,并带有源文件和目标文件。手册中的命令概要部分反映了这一点 ( man cp):

usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory

答案2

秘密在于意识到没有文件扩展名。文件扩展名是一个 CP/M 概念,被 MS_DOS(CP/M 的一个拙劣克隆)采用。 Unix 没有它们,它只是名称的一部分。然而,有一些工具可以帮助解决这个问题。

  • basename: 可用于获取基本名称(不带后缀)。
  • rename:(Larry Wall 版本)非常适合重命名文件。

为了你想要的。

( fileName=foo; cp -T "/path/to/orig/${fileName}" "/path/to/backup/${fileName}.txt" )

为了安全起见,我添加了这个-T选项,它可以被省略(不是所有cp的都有它。但是,如果你犯了一个错误(在第二个参数中指定一个目录),那么如果没有它,它会将文件复制到该目录。

相关内容